#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("zoo.in");
ofstream cout("zoo.out");
/*ifstream cin("input");
ofstream cout("output");*/
struct anim {
long long x;
long long y;
} A[16100];
bool cmp (anim a , anim b){
if (a.x != b.x){
return a.x < b.x;
}
return a.y < b.y;
}
vector <long long > Arb[70000];
void Update (long long nod , long long st , long long dr , long long val , long long pos){
if (st == dr){
Arb[nod].push_back(val);
return;
}
long long mij = (st + dr) / 2;
if (pos <= mij){
Update(nod * 2, st , mij , val , pos);
}
else{
Update(nod * 2 + 1, mij + 1 , dr , val , pos);
}
}
void Update_final(long long nod , long long st , long long dr){
if (st == dr){
return;
}
long long mij = (st + dr) / 2;
Update_final(nod * 2, st , mij);
Update_final(nod * 2 + 1, mij + 1 , dr);
/*for (auto x : Arb[nod * 2]){
Arb[nod].push_back(x);
}
for (auto x : Arb[nod * 2 + 1]){
Arb[nod].push_back(x);
}
sort (Arb[nod].begin() , Arb[nod].end());*/
Arb[nod].resize(Arb[nod * 2].size() + Arb[nod * 2 + 1].size());
merge (Arb[nod * 2].begin() , Arb[nod * 2].end() ,
Arb[nod * 2 + 1].begin() , Arb[nod * 2 + 1].end(),
Arb[nod].begin());
}
void Querry (long long nod , long long st , long long dr , long long minx , long long maxx , long long miny , long long maxy , long long &s){
//cout<<"intru"<<'\n';
if (Arb[nod][Arb[nod].size() - 1] < miny || Arb[nod][0] > maxy){
return;
}
if (A[st].x >= minx && A[dr].x <= maxx ){
//caut binar pos y mai mare sau egal cu miny
// si y mai mic sau egal cu xmax
//1. caut mai mic
long long ymic = 0;
long long ST = 0;
long long DR = Arb[nod].size() - 1;
while(ST <= DR){
long long mij = (ST + DR) / 2;
if (miny <= Arb[nod][mij]){
ymic = mij;
//cout<<"gasit mic "<<ymic<<'\n';
if (ST == DR){
break;
}
DR = mij;
}
else{
ST = mij + 1;
}
}
//2. caut mai mare
long long ymare = -1;
ST = 0;
DR = Arb[nod].size() - 1;
while(ST <= DR){
long long mij = (ST + DR) / 2;
if (maxy >= Arb[nod][mij]){
ymare = mij;
//cout<<"gasit mare "<<ymare<<'\n';
ST = mij + 1;
}
else{
if (ST == DR){
break;
}
DR = mij;
}
}
s += ymare - ymic + 1;
//cout<<"adaug "<<" "<<ymare<<" "<<ymic<<" "<<ymare - ymic + 1<<'\n';
return;
}
if (st == dr){
return;
}
long long mij = (st + dr) / 2;
if (minx <= A[mij].x){
Querry(nod * 2 , st , mij , minx, maxx , miny , maxy , s);
}
if (maxx > A[mij].x){
Querry(nod * 2 + 1 , mij + 1 , dr , minx, maxx , miny , maxy , s);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
long long n;
cin>>n;
for (long long i=1; i<=n; i++){
cin>>A[i].x>>A[i].y;
}
sort (A + 1 , A + n + 1 , cmp);
/*for (long long i=1; i<=n; i++){
cout<<A[i].x<<" "<<A[i].y<<'\n';
}*/
for (long long i=1; i<=n; i++){
Update(1 , 1 , n , A[i].y , i);
}
Update_final(1 , 1 , n);
/*for (auto x : Arb[1]){
cout<<x<<" ";
}*/
long long m;
cin>>m;
for (long long i=1; i<=m; i++){
long long x1 , y1 , x2 , y2;
cin>>x1>>y1>>x2>>y2;
long long s = 0;
Querry (1 , 1 , n, x1 , x2 , y1 , y2 , s);
//cout<<'\n';
cout<<s<<'\n';
}
return 0;
}