#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount #define int long long using namespace std; //typedef long long int ll; typedef pair P; signed main() { int n, k1, k2; cin>>n>>k1>>k2; int q; cin>>q; int a[100010], b[100010]; using Pi=pair; priority_queue, greater> v; vector vec; for(int i=0; i>a[i]>>b[i]; } queue que; int cnt=0; priority_queue, greater> pque; for(int i=0; ia[i]) break; cnt--; pque.pop(); if(!que.empty()){ int j=que.front(); que.pop(); a[j]=x; cnt++; pque.push(a[j]+b[j]); } } if(cnt st1, st2; bool used[100010]={}; for(int i=0; i<=n+1; i++){ st1.insert(i); st2.insert(i); } queue myon; int ans[100010]; while(!v.empty()){ auto p=v.top(); v.pop(); int t=p.second; int i=p.first.second; if(t==0){ i-=q; auto itr=st1.lower_bound(max(k1, k2)); int x=*itr; itr--; int y=*itr; if(x==n+1 && y==0){ auto itr2=st2.lower_bound(max(k1, k2)); int x2=*itr2; itr2--; int y2=*itr2; if(x2==n+1 && y2==0){ //cout<min(k1, k2)-y2){ x2=y2; }else if(k1min(k1, k2)-y){ x=y; }else if(k11) st1.erase(x-1); if(x0){ if(!used[x-1] && !used[x-2]) st1.insert(x-1); } if(x+1<=n){ if(!used[x+1] && !used[x+2]) st1.insert(x+1); } if(!used[x-1] && !used[x+1]) st1.insert(x); } } for(int i=0; i