#include <bits/stdc++.h>
using namespace std;
int n,m,x,y,xi,yi,cn,arboremi[(1<<20)+3],arborema[(1<<20)+3];pair <int,int> coord[16505];
int cb (int nr) {
int i=0,step=1;
for(;(step<<1)<=n;step<<=1);
for(;step>0;step>>=1)
if(i+step<=n && coord[i+step].first<nr)
i+=step;
return i;
}
int cb1 (int nr) {
int i=0,step=1;
for(;(step<<1)<=n;step<<=1);
for(;step>0;step>>=1)
if(i+step<=n && coord[i+step].first<=nr)
i+=step;
return i;
}
void build_arbore () {
for(int i=cn;i<(cn<<1);++i)
if(i-cn+1<=n)
arboremi[i]=coord[i-cn+1].second,arborema[i]=coord[i-cn+1].second;
else
break;
for(int i=cn-1;i>0;--i)
arborema[i]=max(arborema[(i<<1)],arborema[(i<<1)+1]),arboremi[i]=min(arboremi[(i<<1)],arboremi[(i<<1)+1]);
}
int querrys (int st,int dr, int cst, int cdr, int indexx) {
if(cst>=st && cdr<=dr) {
if(arborema[indexx]<=yi && arboremi[indexx]>=y)
return cdr-cst+1;
else if (cst!=cdr) {
int mij=(cst+cdr)>>1;
return querrys(st,dr,cst,mij,(indexx<<1))+querrys(st,dr,mij+1,cdr,(indexx<<1)+1);
}
return 0;
}
else {
int mij=(cst+cdr)>>1,rez=0;
if(mij>=st)
rez+=querrys(st,dr,cst,mij,(indexx<<1));
if(mij+1<=dr)
rez+=querrys(st,dr,mij+1,cdr,(indexx<<1)+1);
return rez;
}
}
int main () {
int poz,poz1;
freopen("zoo.in","r",stdin);
freopen("zoo.out","w",stdout);
scanf("%d", &n);cn=n;
if((cn & (cn-1))!=0) {
for(int i=0;(cn & (cn-1))!=0;++i)
if((cn & (1<<i))!=0)
cn^=(1<<i);
cn<<=1;
}
for(int i=1;i<=n;++i)
scanf("%d%d", &coord[i].first, &coord[i].second);
sort(coord+1,coord+n+1);build_arbore();
scanf("%d", &m);++m;
while(--m) {
scanf("%d%d%d%d", &x, &y, &xi, &yi);
poz=cb(x)+1;poz1=cb1(xi);
if(coord[poz].first<=xi)
printf("%d\n", querrys(poz,poz1,1,cn,1));
}
return 0;
}