#include <cstdio>
#include <utility>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
#define N 16500
int n , m, i ,x1,x2,y1,y2 ;
pair<int,int> a[N];
vector<int> x , arb[4*N] ;
void build(int nod,int st,int dr){
if( st == dr ){
arb[nod].assign(1, a[st].second );
return;
}
int mid = (st+dr) >> 1;
build( nod<<1 , st , mid );
build( (nod<<1)+1, mid+1, dr );
arb[nod].resize( arb[nod<<1].size() + arb[nod*2+1].size() );
merge( arb[nod<<1].begin() , arb[nod<<1].end(), arb[nod*2+1].begin() , arb[nod*2+1].end() , arb[nod].begin() );
}
int query(int nod,int st,int dr){
if( x1 <= st && dr <= x2 )
return upper_bound( arb[nod].begin() , arb[nod].end() , y2 )
- lower_bound( arb[nod].begin() , arb[nod].end() , y1 );
if( st == dr ) return 0;
int mid = (st+dr)>>1 , sol =0;
if( x1 <= mid )
sol = query( nod*2 , st , mid );
if( x2 > mid )
sol+= query( nod*2+1,mid+1,dr );
return sol;
}
int main()
{
freopen("zoo.in" ,"r",stdin);
freopen("zoo.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i){
scanf("%d %d",&a[i].first,&a[i].second);
x.push_back( a[i].first );
}
sort( x.begin() , x.end() );
sort( a+1 , a+n+1 );
build(1,1,n);
scanf("%d",&m);
while(m--){
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
x1 = lower_bound( x.begin() , x.end() , x1 ) - x.begin() + 1;
x2 = upper_bound( x.begin() , x.end() , x2 ) - x.begin();
printf("%d\n",query(1,1,n) );
}
return 0;
}