import std.stdio, std.string, std.conv, std.algorithm, std.numeric;
import std.range, std.array, std.math, std.typecons, std.container, core.bitop;

void main() {
    while (true) {
        int n, w, h;
        int s, t;

        scan(n);

        if (!n) return;

        scan(w, h);
        auto bd = new int[][](w + 1, h + 1);
        foreach (i ; 0 .. n) {
            int xi, yi;
            scan(xi, yi);
            bd[xi][yi]++;
        }

        scan(s, t);
        solve(n, w, h, s, t, bd);
    }
}

void solve(int n, int w, int h, int s, int t, int[][] bd) {
    int ans;

    foreach (i ; 1 .. w - s + 2) {
        foreach (j ; 1 .. h - t + 2) {
            int cnt;

            foreach (k ; i .. i + s) {
                foreach (l ; j .. j + t) {
                    cnt += bd[k][l];
                }
            }

            ans = max(ans, cnt);
        }
    }

    writeln(ans);
}


void scan(T...)(ref T args) {
    string[] line = readln.split;
    foreach (ref arg; args) {
        arg = line.front.to!(typeof(arg));
        line.popFront();
    }
    assert(line.empty);
}



void fillAll(R, T)(ref R arr, T value) {
    static if (is(typeof(arr[] = value))) {
        arr[] = value;
    }
    else {
        foreach (ref e; arr) {
            fillAll(e, value);
        }
    }
}