#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
int x[10005],y[10005];
};
struct pos
{
int x,y,count;
}top;
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
int n,m,a,b;
int map[505][505];
node orig,fi;
int store[505][505];
queue <pos>q;
int main()
{
scanf("%d%d%d%d",&n,&m,&a,&b);
for(int i=0;i<a;i++)
{
scanf("%d%d",&orig.x[i],&orig.y[i]);
q.push((pos){orig.x[i],orig.y[i],0});
store[orig.x[i]][orig.y[i]]=-1;
}
for(int i=0;i<b;i++)
{
scanf("%d%d",&fi.x[i],&fi.y[i]);
}
while(!q.empty())
{
top=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int nx=top.x+dx[i];
int ny=top.y+dy[i];
if(store[nx][ny]==0&&nx>=1&&nx<=n&&ny>=1&&ny<=m)
{
q.push((pos){nx,ny,top.count+1});
store[nx][ny]=top.count+1;
}
}
}
for(int i=0;i<b;i++)
{
if(store[fi.x[i]][fi.y[i]]==-1)printf("0\n");
else printf("%d\n",store[fi.x[i]][fi.y[i]]);
}
return 0;
}