uses math;
const tfi='gropi.in';
tfo='gropi.out';
maxn=100100;
var fi,fo:text;
test,cc,n,m:longint;
res:int64;
x,y:array[0..maxn] of longint;
x1,x2,y1,y2:longint;
f:array[0..maxn] of longint;
procedure swap(var u,v:longint);
var tg:longint;
begin
tg:=u; u:=v; v:=tg;
end;
procedure sort(l,r:longint);
var mid,midy,i,j:longint;
begin
if l>=r then exit;
i:=l; j:=r;
mid:=y[(l+r) div 2];
repeat
while y[i]<mid do inc(i);
while y[j]>mid do dec(j);
if i<=j then
begin
swap(x[i],x[j]);
swap(y[i],y[j]);
inc(i); dec(j);
end;
until i>j;
sort(i,r); sort(l,j);
end;
function findl(u,v:longint):longint;
var l,r,mid,tg:longint;
begin
l:=1; r:=m;
tg:=0;
while l<=r do
begin
mid:=(L+R) DIV 2;
if y[mid]<v then
begin
tg:=max(tg,mid);
l:=mid+1;
end
else r:=mid-1;
end;
exit(tg);
end;
function findr(u,v:longint):longint;
var l,r,mid,tg:longint;
begin
l:=1; r:=m;
tg:=m+1;
while l<=r do
begin
mid:=(L+R) DIV 2;
if y[mid]>v then
begin
tg:=min(tg,mid);
r:=mid-1;
end
else l:=mid+1;
end;
exit(tg);
end;
function dist(u,v,u1,v1:longint):longint;
begin
exit(abs(u-u1)+abs(v-v1));
end;
procedure enter;
var i:longint;
begin
read(Fi,cc,m);
for i:=1 to m do read(fi,x[i],y[i]);
end;
procedure tinh;
var r1,r2,l1,l2,i:longint;
begin
f[1]:=dist(1,1,3-x[1],y[1]);
for i:=2 to m do
f[i]:=f[i-1]+dist(3-x[i-1],y[i-1],3-x[i],y[i]);
read(fi,test);
for i:=1 to test do
begin
read(fi,x1,y1,x2,y2);
if y1>y2 then
begin
swap(y1,y2); swap(x1,x2);
end;
l1:=findl(x1,y1);
l2:=findl(x2,y2);
r1:=findr(x1,y1);
if l1=l2 then res:=dist(x1,y1,x2,y2)
else
begin
res:=dist(x1,y1,3-x[r1],y[r1])+dist(3-x[l2],y[l2],x2,y2);
res:=res+f[l2]-f[r1];
end;
writeln(fo,res+1);
end;
end;
begin
assign(fi,tfi); reset(fi);
assign(Fo,tfo); rewrite(fo);
enter;
sort(1,m);
tinh;
close(Fi); close(Fo);
end.