#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int n,m,a,b,x,y,map[505][505];
int dx[4] = {0,0,-1,1};
int dy[4] = {-1,1,0,0};
int ans = 0;
struct node
{
int x,y;
};
int dis[505][505];
int bfs(int x,int y)
{
queue <node> q;
memset(dis, -1, sizeof dis);
q.push({x,y});
dis[x][y] = 0;
while(q.size())
{
node t = q.front();
q.pop();
if(map[t.x][t.y]) return dis[t.x][t.y];
for(int i = 0; i <= 3; i++)
{
int nx = t.x + dx[i],ny = t.y + dy[i];
if(nx < 1 || nx > n || ny < 1 || ny > m) continue;
if(dis[nx][ny] != -1) continue;
q.push({nx,ny});
dis[nx][ny] = dis[t.x][t.y] + 1;
}
}
}
int main()
{
cin >> n >> m >> a >> b;
for(int i = 1; i <= a; i++)
{
cin >> x >> y;
map[x][y] = 1;
}
for(int i = 1; i <= b; i++)
{
cin >> x >> y;
cout << bfs(x,y) << endl;
}
return 0;
}