#include <bits/stdc++.h>
using namespace std;
int m, n, Q, num;
int ans[222222] = {0};
int mm[444444] = {0};
pair<int, int> cd[222222];
struct master {
  int x1, x2, y1, y2, num;
  void input(int i) {
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    num = i;
  }
} que[2222222];
bool cmp(const master &a, const master &b) { return a.y1 < b.y1; }
int findmax(int nl, int nr, int l, int r, int th) {
  if (nl == l && nr == r) return mm[th];
  int mid = nl + nr >> 1;
  if (r <= mid) return findmax(nl, mid, l, r, th << 1);
  if (l > mid) return findmax(mid + 1, nr, l, r, th << 1 | 1);
  return max(findmax(nl, mid, l, mid, th << 1),
             findmax(mid + 1, nr, mid + 1, r, th << 1 | 1));
}
void update(int nl, int nr, int x, int k, int th) {
  if (nl == nr)
    mm[th] = k;
  else {
    int mid = nl + nr >> 1;
    if (x <= mid)
      update(nl, mid, x, k, th << 1);
    else
      update(mid + 1, nr, x, k, th << 1 | 1);
    mm[th] = max(mm[th], k);
  }
}
vector<int> point[111111];
priority_queue<pair<int, int> > q;
int now[111111] = {0};
void solve() {
  while (!q.empty()) q.pop();
  memset(now, 0, sizeof(now));
  memset(mm, 0, sizeof(mm));
  for (int i = 1; i <= m; i++) point[i].clear();
  sort(que + 1, que + Q + 1, cmp);
  sort(cd + 1, cd + num + 1);
  for (int i = 1; i <= num; i++) point[cd[i].first].push_back(cd[i].second);
  for (int i = 1; i <= m; i++) {
    if (point[i].size() == 0)
      update(1, m, i, n + 1, 1);
    else
      update(1, m, i, point[i][0], 1), q.push(make_pair(-point[i][0], i));
  }
  int j = 1;
  for (int i = 1; i <= n; i++) {
    while (que[j].y1 == i && j <= Q) {
      if (findmax(1, m, que[j].x1, que[j].x2, 1) <= que[j].y2)
        ans[que[j].num] = 1;
      j++;
    }
    while (!q.empty()) {
      if (q.top().first == -i) {
        int th = q.top().second;
        q.pop();
        if (now[th] == point[th].size() - 1)
          update(1, m, th, n + 1, 1);
        else
          now[th]++, update(1, m, th, point[th][now[th]], 1),
              q.push(make_pair(-point[th][now[th]], th));
      } else
        break;
    }
  }
}
int main() {
  cin >> m >> n >> num >> Q;
  for (int i = 1; i <= num; i++) scanf("%d%d", &cd[i].first, &cd[i].second);
  for (int i = 1; i <= Q; i++) que[i].input(i);
  solve();
  swap(m, n);
  for (int i = 1; i <= num; i++) swap(cd[i].first, cd[i].second);
  for (int i = 1; i <= Q; i++)
    swap(que[i].x1, que[i].y1), swap(que[i].x2, que[i].y2);
  solve();
  for (int i = 1; i <= Q; i++) {
    if (ans[i])
      puts("YES");
    else
      puts("NO");
  }
  return 0;
}
