// 2003 domestic B
// 作成 2004.6.23
#include <stdio.h>
#define XX 500
#define YY 500
void print(short map[XX][YY],int xx,int yy);
int main(void)
{
int i, j, s, t, x, y, w, h;
int kaki, max, sum;
short map[XX][YY];
while(1){
scanf("%d", &kaki);
// printf("kaki=%d\n",kaki);
if(kaki==0){
break;
}
// マップをクリア
for(y=0; y<YY; y++){
for(x=0; x<XX; x++){
map[x][y]=0;
}
}
// マップのサイズ
scanf("%d %d", &w, &h);
// printf("w=%d h=%d\n",w,h);
// 柿の木の座標読み込み
for(i=0; i<kaki; i++){
scanf("%d %d", &x, &y);
map[x-1][y-1]=1;
}
// print(map,w,h);
// 囲む長方形のサイズ
scanf("%d %d", &s, &t);
// printf("s=%d t=%d\n",s,t);
// しらみつぶしに調べる
max=0;
for(y=0; y<h; y++){
for(x=0; x<w; x++){
sum=0;
for(j=0; j<t; j++){
for(i=0; i<s; i++){
sum+=map[x+i][y+j]; // 長方形の中の柿の木の数
}
}
if(max<sum){
max=sum; // 最大値を求める
}
}
}
printf("%d\n",max);
}
return 0;
}
void print(short map[XX][YY],int xx,int yy)
{
int x,y;
for(y=0; y<yy; y++){
for(x=0; x<xx; x++){
printf("%d",map[x][y]);
}
printf("\n");
}
}