#include<bits/stdc++.h>
#define N 5010
using namespace std;
int n, m, x0, t;
int x[10001][2], y[10001][2];
int dis[N][N];
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
struct node
{
int a;
int b;
};
queue<node>q;
bool check(int x, int y)
{
if (x<1 || x>n)return false;
if (y<1 || y>m)return false;
if (dis[x][y] >= 0)return false;
return true;
}
void bfs()
{
while (!q.empty()) {
int e = q.front().a;
int f = q.front().b;
q.pop();
for (int i = 0; i < 4; i++)
{
int xx = e + dx[i];
int yy = f + dy[i];
if (check(xx, yy))
{
q.push(node{ xx,yy });
dis[xx][yy] = dis[e][f] + 1;
}
}
}
}
int main()
{
scanf("%d%d%d%d", &n, &m, &x0, &t);
memset(dis, -1, sizeof dis);
for (int i = 1; i <= x0; i++)
{
scanf("%d%d", &x[i][0], &x[i][1]);
dis[x[i][0]][x[i][1]] = 0;
q.push(node{ x[i][0],x[i][1] });
}
for (int i = 1; i <= t; i++)
{
scanf("%d%d", &y[i][0], &y[i][1]);
}
bfs();
for (int i = 1; i <= t; i++)
{
printf("%d\n", dis[y[i][0]][y[i][1]]);
}
return 0;
}