#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int maxx=100005;
int difx[5]={0,0,-1,-1},dify[5]={0,-1,0,-1},x,y,a1,a2,key,i,n,m,w,h,l,j,nr;
vector < pair<int , int> > hash[maxx];
int line(int x,int y)
{
a1=x/w,a2/h;
return ((a1+difx[l])*666013+(a2+dify[l]))%(maxx-10);
}
bool apar(pair<int , int > a,pair<int , int > b)
{
if(b.first<=a.first+w&&b.first>=a.first&&b.second<=a.second+h&&b.second>=a.second)
return true;
return false;
}
void read()
{
scanf("%d%d%d%d",&n,&m,&w,&h);
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
key=line(x,y);
hash[key].push_back(make_pair(x,y));
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
for(l=0;l<=3;l++)
{
key=line(x,y);
for(j=0;j<hash[key].size();j++)
if(apar(hash[key][j],make_pair(x,y)))
{
nr++;
break;
}
if(j<hash[key].size())
break;
}
}
}
int main()
{
freopen("ograzi.in","r",stdin);
freopen("ograzi.out","w",stdout);
read();
printf("%d\n",nr);
return 0;
}