#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
ifstream in("zoo.in");
ofstream out("zoo.out");
const int MAX = 32000;
struct punct {
int x, y;
};
inline bool cmpx(punct a, punct b) {
return a.x < b.x;
}
vector<int> a[100000];
punct x[16010];
int i,j,n,m,qix,qiy,qsx,qsy,up[16010];
void build(int i, int li, int ls) {
if(li > ls)
return;
if(li == ls) {
a[i].push_back(x[li].y);
return;
}
build(2*i, li, (li+ls)/2);
build(2*i+1, (li+ls)/2+1, ls);
// a[i].resize(a[2*i].size() + a[2*i+1].size(), 0);
vector<int>::iterator it1 = a[2*i].begin(), it2 = a[2*i+1].begin(), end1 = a[2*i].end(), end2 = a[2*i+1].end();
while(it1 != end1 && it2 != end2) {
if(*it1 < *it2) {
a[i].push_back(*it1);
++ it1;
} else {
a[i].push_back(*it2);
++ it2;
}
}
while(it1 != end1)
a[i].push_back(*it1), ++it1;
while(it2 != end2)
a[i].push_back(*it2), ++it2;
}
int query(int i, int li, int ls, int lix, int liy, int lsx, int lsy) {
if(x[ls].x < lix || x[li].x > lsx)
return 0;
if(lix <= x[li].x && lsx >= x[ls].x) {
return 2;
vector<int>::iterator start = lower_bound(a[i].begin(), a[i].end(), liy);
vector<int>::iterator end = upper_bound(a[i].begin(), a[i].end(), lsy);
return end-start;
}
return query(2*i, li, (li+ls)/2, lix, liy, lsx, lsy) + query(2*i+1, (li+ls)/2+1, ls, lix, liy, lsx, lsy);
}
int readnext(char *s, int &j) {
int v = 0, sgn=1;
while(!(s[j] == '-' || s[j] >= '0' && s[j] <= '9'))
++ j;
if(s[j] == '-') {
sgn *= -1;
++ j;
}
while(s[j] >= '0' && s[j] <= '9') {
v = v*10 + s[j] - '0';
++ j;
}
return v * sgn;
}
int main() {
in>>n;
for(i=1; i<=n; i++) {
in>>x[i].x>>x[i].y;
}
sort(x+1, x+n+1, cmpx);
build(1, 1, n);
in>>m;
int pos = in.tellg();
in.seekg(0, ios::end);
int end = in.tellg();
in.seekg(pos, ios::beg);
char *s = new char[end-pos+10];
in.read(s, end-pos+10);
for(i=1; i<=m; i++) {
qix = readnext(s, j);
qiy = readnext(s, j);
qsx = readnext(s, j);
qsy = readnext(s, j);
out<<query(1, 1, n, qix, qiy, qsx, qsy)<<endl;
}
return 0;
}