/*
多元bfs就是从多个点开始,开始的时候多往初始队列放几个进去
距离数组中最好初始化为-1;然后再起点入队时赋值为0
*/
#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int f[510][510],dist[510][510];
struct node{
int x,y;
};
int main(){
memset(dist,-1,sizeof(dist));
// memset(f,-1,sizeof(f));
int n,m,a,b;
cin>>n>>m>>a>>b;
queue<node> q;
node t1;
for(int i=1;i<=a;i++){
int k,t;
cin>>k>>t;
t1.x=k;
t1.y=t;
f[k][t]=1;
q.push(t1);
dist[k][t]=0;
}
while(q.size()){
int a=q.front().x;
int b=q.front().y;
q.pop();
for(int i=0;i<4;i++){
int a1=dx[i]+a;
int b1=dy[i]+b;
if(a1<1||a1>n||b1<1||b1>m)continue;
if(dist[a1][b1]>=0)continue;
if(f[a1][b1]==1)continue;
dist[a1][b1]=dist[a][b]+1;
node temp;
temp.x=a1;
temp.y=b1;
q.push(temp);
}
}
for(int i=1;i<=b;i++){
int k,t;
cin>>k>>t;
printf("%d\n",dist[k][t]);
}
//cout<<dist[5][4];
return 0;
}