#include<bits/stdc++.h>
using namespace std;
char mp[505][505];
int n,m,a,b;
int dx[4]= {0,0,1,-1};
int dy[4]= {1,-1,0,0};
int vis[505][505];
struct node {
int x,y,s;
} que[105*105];
void bfs(int nx,int ny) {
queue<node> q;
node a= {nx,ny,0};
q.push(a);
vis[nx][ny]=1;
while(!q.empty()) {
node p=q.front();
q.pop();
if(mp[p.x][p.y]=='b') {
cout<<p.s<<endl;
return;
}
for(int i=0; i<4; i++) {
int nx=p.x+dx[i];
int ny=p.y+dy[i];
if(vis[nx][ny]==0&&nx<=n&&nx>=1&&ny<=m&&ny>=1) {
node ep={nx,ny,p.s+1};
q.push(ep);
vis[nx][ny]=1;
}
}
}
}
int main() {
int x1,y1;
cin>>n>>m>>a>>b;
for(int i=1;i<=a;i++){
cin>>x1>>y1;
mp[x1][y1]='b';
}
for(int i=1;i<=b;i++){
memset(vis,0,sizeof(vis));
cin>>x1>>y1;
bfs(x1,y1);
}
return 0;
}