#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn=505;
int n,m,a,b,dx[]={-1,0,1,0},dy[]={0,1,0,-1},vis[maxn][maxn],tmpx,tmpy;
vector<int> v1,v2;
struct node{
int x,y,step;
};
void in(){
cin>>tmpx>>tmpy;
tmpx--,tmpy--;
}
void bfs(vector<int>_x,vector<int>_y){
queue<node>q;
for(int i=0;i<_x.size();i++){
q.push(node{_x[i],_y[i],0}),
vis[_x[i]][_y[i]]=0;
}
while(q.size()){
node tmp=q.front();
q.pop();
for(int i=0;i<4;i++){
int tx=tmp.x+dx[i],ty=tmp.y+dy[i];
if(tx<0||tx>=n||ty<0||ty>=m||vis[tx][ty]+1)continue;
vis[tx][ty]=tmp.step;
q.push(node{tx,ty,tmp.step+1});
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
memset(vis,-1,sizeof(vis));
cin>>n>>m>>a>>b;
for(int i=0;i<a;i++){
in();
v1.push_back(tmpx);
v2.push_back(tmpy);
}
bfs(v1,v2);
for(int i=0;i<b;i++){
in();
cout<<vis[tmpx][tmpy]<<endl;
}
return 0;
}