void solve() {
int n, h0, a0;
rd(n, h0, a0);
vector<int> h(n + 1), a(n + 1);
rep(i, 1, n) rd(h[i]);
rep(i, 1, n) rd(a[i]);
vector<vector<int>> g(n + 1);
vector<int> deg(n + 1);
rep(i, 1, n) if (a[i] < a0 and h[i] < h0) g[0].pb(i), deg[i]++;
rep(i, 1, n) rep(j, 1, n) {
if (!deg[i] or !deg[j]) continue;
if (a[i] > a[j] and h[i] > h[j]) g[i].pb(j), deg[j]++;
}
// println(deg);
vector<int> dis(n + 1);
queue<int> q;
rep(i, 0, n) if (!deg[i]) q.push(i);
while (q.size()) {
int u = q.front(); q.pop();
for (int v : g[u]) {
if (!--deg[v]) {
q.push(v);
dis[v] = dis[u] + 1;
}
}
}
int mx = 0;
rep(i, 0, n) {
if (dis[i] != (int)INF) {
mx = max(mx, dis[i]);
}
}
println(mx);
}