#include "robots.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
int putaway(int A, int B, int n, int X[], int Y[], int W[], int S[]) {
sort(X, X+A);
sort(Y, Y+B);
int ans = 1e9;
int l = 0, r = n;
vector<pair<int, int>> ordw(n);
vector<int> alive(n);
while (l <= r) {
int m = (l+r)/2;
//cout << m << endl;
for (int i = 0; i < n; i++) ordw[i] = {W[i], i}, alive[i] = 1;
sort(ordw.begin(), ordw.end());
int p = 0;
priority_queue<pair<int, int>> pqs;
for (int i = 0; i < A; i++) {
for (; p < n; p++) {
if (ordw[p].first >= X[i]) break;
pqs.push({S[ordw[p].second], ordw[p].second});
}
for (int j = 0; j < m && pqs.size(); j++) {
auto [_, k] = pqs.top(); pqs.pop();
//cout << "robot A" << i << ": " << k << endl;
alive[k] = 0;
}
}
//for (int x : alive) cout << x << " "; cout << endl;
vector<pair<int, int>> ords;
for (int i = 0; i < n; i++) if (alive[i]) ords.push_back({S[i], i});
sort(ords.begin(), ords.end());
p = 0;
vector<int> rem;
for (int i = 0; i < B; i++) {
for (; p < ords.size(); p++) {
if (ords[p].first >= Y[i]) break;
rem.push_back(ords[p].second);
}
for (int j = 0; j < m && rem.size(); j++) {
alive[rem.back()] = 0;
//cout << "robot B" << i << ": " << rem.back() << endl;
rem.pop_back();
}
}
//for (int x : alive) cout << x << " "; cout << endl;
int ok = 0;
for (int i = 0; i < n; i++) ok += alive[i];
ok = !ok;
//cout << (ok ? "ok" : "bad") << endl;
if (ok) {
r = m-1;
ans = m;
}
else l = m+1;
}
return ans == 1e9 ? -1 : ans;
}