#include<bits/stdc++.h>
#define reg register
#pragma G++ optimize(2)
#pragma G++ optimize(3)
#define F(i,a,b) for(reg int i=(a);i<=(b);i++)
inline int read();
using namespace std;
const int N=260,M=2e3+10;
int n,m,q,cnt,cnt2,Case;
bool pc[N][N];
int pc_t[N][N],rec[M][4],dis[M][M],cl[M][M];
int g[10][2] {0,1,0,-1,-1,0,1,0};//r,l,u,d
struct P {
int x,y;
} a,b,c[M];
inline void add(int x,int y) {
if(pc[x][y] or pc_t[x][y] or x<1 or y<1 or x>n or y>n)return;
c[++cnt]= {x,y},pc_t[x][y]=cnt;
}
inline void sign_it() {
int x,y;
F(i,1,m)x=read(),y=read(),pc[x][y]=1;
F(i,1,n) {
F(j,1,n) {
if(!pc[i][j])continue;
add(i+1,j),add(i-1,j),add(i,j+1),add(i,j-1);
}
}
F(i,1,n)add(1,i),add(i,1),add(n,i),add(i,n);
}
inline void pre(int l,int r) {
F(i,l,r) {
F(k,0,3) {
int x=c[i].x,y=c[i].y;
while(x>=1 and x<=n and y>=1 and y<=n) {
x+=g[k][0],y+=g[k][1];
if(pc[x][y]) {
rec[i][k]=pc_t[x-g[k][0]][y-g[k][1]];
break;
}
}
}
}
}
inline void init() {
sign_it();
pre(1,cnt);
cnt2=cnt;
}
inline void bfs() {
int &t1=pc_t[a.x][a.y],&t2=pc_t[b.x][b.y];
if(t1==t2){
puts("0");
return;
}
queue<P>q;
q.push({t1,t2});
dis[t1][t2]=0;
cl[t1][t2]=Case;
while(!q.empty()) {
P t=q.front();
q.pop();
F(k,0,3) {
int &to1=rec[t.x][k],&to2=rec[t.y][k];
if(cl[to1][to2]!=Case)dis[to1][to2]=-1;
if(~dis[to1][to2])continue;
dis[to1][to2]=dis[t.x][t.y]+1;
if(to1==to2){
printf("%d\n",dis[to1][to2]);
return;
}
cl[to1][to2]=Case;
q.push({to1,to2});
}
}
puts("-1");
}
inline void solve() {
cnt=cnt2;
int k1=pc_t[a.x][a.y],k2=pc_t[b.x][b.y];
add(a.x,a.y),add(b.x,b.y);
pre(cnt2+1,cnt);
bfs();
pc_t[a.x][a.y]=k1,pc_t[b.x][b.y]=k2;
}
int main() {
// freopen("data.in","r",stdin);
n=read(),m=read(),q=read();
F(i,1,n)pc[0][i]=pc[i][0]=pc[n+1][i]=pc[i][n+1]=1;
init();
F(i,1,q) {
Case++;
a.x=read(),a.y=read(),b.x=read(),b.y=read();
solve();
}
return 0;
}
inline int read() {
reg int x=0;
reg char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x;
}