#include<cstdio>
#include<fstream>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<bitset>
#include<deque>
#include<queue>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<unordered_map>
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define pll pair<ll,ll>
#define x first
#define y second
using namespace std;
const int nmax = 16005;
int n, i, q, x1, y1, x2, y2, sol;
pair<int, int> p[nmax];
vector<int> seg[4 * nmax];
void build(int node, int l, int r)
{
if(l == r)
{
seg[node].pb(p[l].y);
return;
}
int m = (l + r) / 2;
int ls = 2 * node;
int rs = 2 * node + 1;
build(ls, l, m);
build(rs, m + 1, r);
seg[node].resize(r - l + 1);
merge(seg[ls].begin(), seg[ls].end(), seg[rs].begin(), seg[rs].end(), seg[node].begin());
}
void query(int node, int l, int r)
{
if(p[l].x >= x1 && p[r].x <= x2)
{
int L = lower_bound(seg[node].begin(), seg[node].end(), y1) - seg[node].begin();
int U = upper_bound(seg[node].begin(), seg[node].end(), y2) - seg[node].begin();
sol += U - L;
return;
}
int m = (l + r) / 2;
int ls = 2 * node;
int rs = 2 * node + 1;
if(x1 <= p[m].x)
query(ls, l, m);
if(x2 > p[m].x)
query(rs, m + 1, r);
}
int main()
{
freopen("zoo.in", "r", stdin);
freopen("zoo.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d%d", &p[i].x, &p[i].y);
sort(p + 1, p + n + 1);
build(1, 1, n);
scanf("%d", &q);
for(; q; q--)
{
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
sol = 0;
query(1, 1, n);
printf("%d\n", sol);
}
return 0;
}