#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>A[100100];
struct pct{
int x;
int y;
}v[20100];
int cmp(pct a,pct b){
return a.x<b.x;
}
int n,m,i,j,a,b,a1,b1,nr;
FILE *f,*g;
void upd(int nod,int st,int dr){
if(st==dr){
A[nod].push_back(st);
return;
}
int mid=(st+dr)/2;
upd(2*nod,st,mid);
upd(2*nod+1,mid+1,dr);
int i=0,j=0;
a=2*nod;
b=2*nod+1;
while( i < A[a].size() && j < A[b].size() ){
if( v[ A[a][i] ].y < v[ A[b][j] ].y ){
A[nod].push_back(A[a][i]);
i++;
}
else{
A[nod].push_back(A[b][j]);
j++;
}
}
for(;i<A[a].size();i++)
A[nod].push_back(A[a][i]);
for(;j<A[b].size();j++)
A[nod].push_back(A[b][j]);
}
void query(int nod,int st,int dr,int a1,int b1,int a2,int b2){
if( a1 <= v[st].x && v[dr].x <= a2 ){
int p,u,mid,poz;
p=0;
u=A[nod].size()-1;
while(p<=u){
mid=(p+u)/2;
if( v[ A[nod][mid] ].y < b1 )
p=mid+1;
else
u=mid-1;
}
poz=p;
p=0;
u=A[nod].size()-1;
while(p<=u){
mid=(p+u)/2;
if( v[ A[nod][mid] ].y <= b2 )
p=mid+1;
else
u=mid-1;
}
nr+=u-poz+1;
}
else{
int mid=(st+dr)/2;
if(v[mid].x>=a1)
query(2*nod,st,mid,a1,b1,a2,b2);
if(v[mid+1].x<=a2)
query(2*nod+1,mid+1,dr,a1,b1,a2,b2);
}
}
int main(){
f=fopen("zoo.in","r");
g=fopen("zoo.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d%d",&v[i].x,&v[i].y);
}
sort(v+1,v+n+1,cmp);
upd(1,1,n);
fscanf(f,"%d",&m);
while(m--){
nr=0;
fscanf(f,"%d%d%d%d",&a,&b,&a1,&b1);
if( v[1].x > a1 || v[n].x < a )
fprintf(g,"0\n");
else{
query(1,1,n,a,b,a1,b1);
fprintf(g,"%d\n",nr);
}
}
fclose(f);
fclose(g);
return 0;
}