#include #define ALL(v) std::begin(v),std::end(v) using lint=long long; using ld=long double; int main(){ std::cin.tie(nullptr);std::ios_base::sync_with_stdio(false); std::cout.setf(std::ios_base::fixed);std::cout.precision(15); lint n,k0,k1,q;std::cin>>n>>k0>>k1>>q;k0--,k1--; std::vector>events; for(lint i=0;i>a>>b; events.emplace_back(a+b,0,i); events.emplace_back(a,1,i); } auto dist_to_exit=[&](lint x){return std::abs(3*x-(2*k0+k1));}; auto nearer=[&](lint x,lint y){return dist_to_exit(x); std::sort(ALL(events)); std::dequewait; std::vectorans(q),ckd(n,-1); std::array,2>sets{std::set(nearer),std::set(nearer)}; for(lint i=0;i(events.at(l))==std::get<0>(events.at(r));r++); for(;l(events.at(l))==0;l++){ lint i=std::get<2>(events.at(l)); ckd.at(ans.at(i))=-1; update_three(ans.at(i)); } for(;l(events.at(l)); wait.push_back(i); } while(!wait.empty()){ bool found=false; for(auto&&set:sets){ if(set.empty())continue; lint i=wait.front();wait.pop_front(); lint a=*set.begin(); set.erase(set.begin()); ans.at(i)=a; ckd.at(a)=i; update_three(ans.at(i)); found=true; break; } if(!found)break; } } for(lint x:ans){ std::cout<