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);
}