import std.stdio;
import std.algorithm;
import std.string;
import std.range;
import std.array;
import std.conv;
import std.complex;
import std.math;
import std.ascii;
import std.bigint;
import std.container;
import std.typecons;

auto readInts() {
	return array(map!(to!int)(readln().strip().split()));
}
auto readInt() {
	return readInts()[0];
}
auto readLongs() {
	return array(map!(to!long)(readln().strip().split()));
}
auto readLong() {
	return readLongs()[0];
}

const real eps = 1e-10;

void main(){
	while(true) {
		auto N = readInt();
		if(N == 0) {
			return;
		}
		auto WH = readInts();
		auto W = WH[0];
		auto H = WH[1];
		auto m = new int[][](W, H);
		for(int i; i < N; ++i) {
			auto xy = readInts();
			m[xy[0]-1][xy[1]-1] = 1;
		}
		auto st = readInts();
		auto s = st[0];
		auto t = st[1];
		auto dp = new int[][](W, H);
		for(int i; i < H; ++i) {
			for(int j; j < s; ++j) {
				dp[0][i] += m[j][i];
			}
			for(int j = 1; j+s-1 < W; ++j) {
				dp[j][i] = dp[j-1][i] - m[j-1][i] + m[j+s-1][i];
			}
		}
		auto dp2 = new int[][](W, H);
		for(int i; i < W; ++i) {
			for(int j; j < t; ++j) {
				dp2[i][0] += dp[i][j];
			}
			for(int j = 1; j+t-1 < H; ++j) {
				dp2[i][j] = dp2[i][j-1] - dp[i][j-1] + dp[i][j+t-1];
			}
		}
		int ans;
		for(int i; i < W; ++i) {
			for(int j; j < H; ++j) {
				ans = max(dp2[i][j], ans);
			}
		}
		writeln(ans);
	}
}