Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Subtask/Task Score:

{30/30}{30/30}{40/40}

Score: 100

User: C12

Problemset: Red Zone

Language: cpp

Time: 0.016 second

Submitted On: 2026-01-22 00:48:36

#include <bits/stdc++.h>
using namespace std;

#define f first
#define s second
#define pii pair<ll,ll>
#define puii pair<ull,ull>
#define piii pair<ll,pii>
#define ll long long
#define ull unsigned long long
#define mp make_pair
 
#define mpiii(a,b,c) make_pair(a,make_pair(b,c));
int32_t mod = 1e9+7;

ll n,m,l,d;
ll a[100001],b[100001];

bool bi(int k){
    ll dmg[n] = {0};

    for(int i = 0;i < k;i++){
        dmg[max(0LL,b[i]-l)] += d;
        dmg[min(n,b[i]+l+1)] -= d;
    }
    ll damage = 0;
    for(int i = 0;i < n;i++){
        damage += dmg[i];
        // cout << damage << ' ';
        if(damage < a[i]){
            // cout << '\n';
            return 0;
        }
        
    }
    // cout << '\n';
    return 1;
}

void solve(){
    cin >> n >> m >> l >> d;

    for(int i = 0;i < n;i++){
        cin >> a[i];
    }
    for(int i = 0;i < m;i++){
        cin >> b[i];
        b[i]--;
    }

    ll low = 1;
    ll high = m;
    ll mid;

    // cout << '\n';
    while(low < high){
        mid = (low + high)/2;
        if(bi(mid)){
            high = mid;
        }
        else{
            low = mid + 1;
        }
        // cout << mid << '\n';
    }
    if(low == m && !bi(m)){
        cout << -1;
        return;
    }

    cout << low;
    return;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    // ll q;
 
    // cin >> q;
    
    // while(q--) 
    solve();

    return 0;
}
/*
5 3 3 3
3 3 3 3 3
1
3
3

*/