#include "robots.h"
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10;
const int M=1e6+10;
vector<int> f[N];
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
sort(X,X+A);
int id=0;
vector<pair<int,int>> v;
for(int i=0;i<T;i++) v.push_back({W[i],S[i]});
sort(v.begin(),v.end());
for(int i=0;i<A;i++){
while(id<T && v[id].first<X[i]){
f[i].push_back(id);
id++;
}
}
while(id<T) f[A].push_back(id++);
//f[i] is the bound of toy which is updated when iterating thorugh X[i]
sort(Y,Y+B,greater<int>());
int l=0,r=2*T;
while(l<r){
int mid=(l+r)/2;
//queue keep the size in search space in decreasing order
priority_queue<int> q;
for(int i=0;i<A;i++){
for(auto x:f[i]){
q.push(v[x].second);
}
for(int j=0;j<mid;j++){
if(!q.empty()) q.pop();
else break;
}
}
for(auto x:f[A]) q.push(v[x].second);
//clear greedily using small robot
for(int i=0;i<B;i++){
for(int j=0;j<mid;j++){
if(!q.empty()){
if(Y[i]>q.top()) q.pop();
else break;
}
else break;
}
}
if(!q.empty()) l=mid+1;
else r=mid;
}
if(l>T) return -1;
return l;
}