#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
const int NMAX = 16001, QMAX = 100001;
const int COORDMAX = NMAX + 2 * QMAX + 1;
struct point {
int x, y;
};
struct line {;
int lo, hi, x;
};
map<int, int> normValY, normValX;
vector<int> ordpt[COORDMAX + 1], ordql[COORDMAX + 1], ordqr[COORDMAX + 1];
int aib[COORDMAX + 1];
int cY[COORDMAX + 1], cX[COORDMAX + 1];
int ans[QMAX + 1];
point pts[NMAX + 1];
line qLeft[QMAX + 1];
line qRight[QMAX + 1];
inline void normaliseAll(int tot);
inline void updAIB(int pos, int val, int n);
inline int queryAIB(int pos);
inline int queryInt(int lo, int hi);
int main() {
int n, nrq, i, ind;
FILE *fin = fopen("zoo.in", "r");
fscanf(fin, "%d", &n);
ind = 1;
for (i = 0; i < n; i++) {
fscanf(fin, "%d%d", &pts[i].x, &pts[i].y);
cY[ind] = pts[i].y, cX[ind] = pts[i].x;
ind++;
}
fscanf(fin, "%d", &nrq);
for (i = 0; i < nrq; i++) {
point p1, p2;
fscanf(fin, "%d%d%d%d", &p1.x, &p1.y, &p2.x, &p2.y);
cY[ind] = p1.y, cX[ind] = p1.x;
ind++;
cY[ind] = p2.y, cX[ind] = p2.x;
ind++;
qLeft[i].x = p1.x, qLeft[i].lo = p1.y, qLeft[i].hi = p2.y;
qRight[i].x = p2.x, qRight[i].lo = p1.y, qRight[i].hi = p2.y;
}
fclose(fin);
normaliseAll(ind);
for (i = 0; i < n; i++)
ordpt[normValX.find(pts[i].x) -> second].push_back(i);
for (i = 0; i < nrq; i++) {
ordql[normValX.find(qLeft[i].x) -> second].push_back(i);
ordqr[normValX.find(qRight[i].x) -> second].push_back(i);
}
ind--;
for (i = 1; i <= ind; i++) {
int len, k, j;
len = ordql[i].size();
for (j = 0; j < len; j++) {
k = ordql[i][j];
ans[k] -= queryInt(normValY.find(qLeft[k].lo) -> second, normValY.find(qLeft[k].hi) -> second);
}
len = ordpt[i].size();
for (j = 0; j < len; j++) {
k = ordpt[i][j];
updAIB(normValY.find(pts[k].y) -> second, 1, ind);
}
len = ordqr[i].size();
for (j = 0; j < len; j++) {
k = ordqr[i][j];
ans[k] += queryInt(normValY.find(qRight[k].lo) -> second, normValY.find(qRight[k].hi) -> second);
}
}
FILE *fout = fopen("zoo.out", "w");
for (i = 0; i < nrq; i++)
fprintf(fout, "%d\n", ans[i]);
fclose(fout);
return 0;
}
inline void normaliseAll(int tot) {
sort(cY + 1, cY + tot);
sort(cX + 1, cX + tot);
for (int i = 1; i < tot; i++) {
normValY.insert(pair<int, int>(cY[i], i));
normValX.insert(pair<int, int>(cX[i], i));
}
}
inline void updAIB(int pos, int val, int n) {
for (; pos <= n; pos += (pos & -pos))
aib[pos] += val;
}
inline int queryAIB(int pos) {
int s = 0;
for (; pos > 0; pos -= (pos & -pos))
s += aib[pos];
return s;
}
inline int queryInt(int lo, int hi) {
return queryAIB(hi) - queryAIB(lo - 1);
}