#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int jump_x[5]={0,1,-1,0,0};
const int jump_y[5]={0,0,0,1,-1};
struct data{
int nx,ny;
}t[100001];
int n,m,a,b,vis[1001][1001];
int vris_x[1001],vris_y[1001];
int king_x[1001],king_y[1001];
int ans[1001][1001],map[1001][1001];
int l,r;
void bfs(){
int pd=0;
for(int i=1;i<=a;i++){
t[++r].nx=vris_x[i];
t[r].ny=vris_y[i];
ans[t[r].nx][t[r].ny]=0;
if(map[t[r].nx][t[r].ny]==2){
pd++; vis[t[r].nx][t[r].ny]=1;
}
}
l=1;
while(l<=r){
for(int i=1;i<=4;i++){
int xx=t[l].nx+jump_x[i],yy=t[l].ny+jump_y[i];
if(ans[xx][yy]==0&&xx>0&&xx<=n&&yy>0&&yy<=m&&vis[xx][yy]!=1){
ans[xx][yy]=ans[t[l].nx][t[l].ny]+1; t[++r].nx=xx; t[r].ny=yy;
if(map[xx][yy]==2){
pd++; if(pd==b) return;
}
}
}
l++;
}
}
int main()
{
cin>>n>>m>>a>>b;
for(int i=1;i<=a;i++){
cin>>vris_x[i]>>vris_y[i]; map[vris_x[i]][vris_y[i]]=1;
}
for(int i=1;i<=b;i++){
cin>>king_x[i]>>king_y[i]; map[king_x[i]][king_y[i]]=2;
}
bfs();
for(int i=1;i<=b;i++){
if(map[king_x[i]][king_y[i]]==1){
cout<<0<<endl;
}else cout<<ans[king_x[i]][king_y[i]]<<endl;
}
return 0;
}