#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#include<math.h>
#include<queue>
#include<set>
#include<string.h>
#include<string>
#include<stdio.h>
#include<deque>
#define lll __uint128_t
#define ld long double
#define ull unsigned long long
#define fi first
#define sc second
#define all(v) v.begin(),v.end()
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int N = 1e5 + 10, base = 13331, mod = 1e9 + 7;
using namespace std;
int dir[]={0,1,0,-1,0};
const int dx[]={1,1,1,0,0,-1,-1,-1};
const int dy[]={1,0,-1,1,-1,0,1,1};
typedef pair<int, int>PAIR;
vector<vector<int>> g(1502,vector<int>(1502));
vector<vector<bool>> v(1502,vector<bool>(1502));
PAIR s;
bool check(int x,int y,int n,int m){
return x>0&&x<=n&&y>0&&y<=m;
}
void solve()
{
int n,m,a,b;cin>>n>>m>>a>>b;
queue<PAIR> q;
for(int i=1;i<=a;i++) {
int x,y;cin>>x>>y;
s={x,y};
q.push(s);
g[x][y]=0;
v[x][y]=true;
}
int tepe=0;
while(!q.empty()){
int cent=q.size();
tepe++;
while(cent--){
auto ts=q.front();
q.pop();
for(int i=0;i<4;i++){
PAIR tt={ts.fi+dir[i],ts.sc+dir[i+1]};
if(check(tt.fi,tt.sc,n,m)&&!v[tt.fi][tt.sc]){
g[tt.fi][tt.sc]=tepe;
v[tt.fi][tt.sc]=true;
q.push(tt);
}
}
}
}
for(int i=1;i<=b;i++){
int x,y;cin>>x>>y;
cout<<g[x][y]<<endl;
}
}
signed main()
{
io;
int T = 1;
while(T -- ) solve();
}