#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n, m, k, q;
using pii = pair<int, int>;
vector<pii> vec;
int vis[200005];
struct data {
  int first[2], second[2], id;
  data() {}
  void input(int _id) {
    scanf("%d %d %d %d", &first[0], &second[0], &first[1], &second[1]);
    id = _id;
  }
} R[200005];
bool cmp(data A, data B) { return A.first[1] < B.first[1]; }
bool cmp_vec(pii first, pii second) { return first.second < second.second; }
bool cmp1(data A, data B) { return A.second[1] < B.second[1]; }
int mn[200005 << 2];
void init() { memset(mn, 0, sizeof mn); }
void update(int p, int val, int L, int R, int seg) {
  if (L == R) {
    mn[seg] = val;
    return;
  }
  int mid = L + R >> 1;
  if (p <= mid)
    update(p, val, L, mid, seg << 1);
  else
    update(p, val, mid + 1, R, seg << 1 | 1);
  mn[seg] = min(mn[seg << 1], mn[seg << 1 | 1]);
  return;
}
int get_min(int l, int r, int L, int R, int seg) {
  if (l <= L && R <= r) return mn[seg];
  int mid = L + R >> 1;
  int res = 1e9;
  if (l <= mid) res = min(res, get_min(l, r, L, mid, seg << 1));
  if (mid < r) res = min(res, get_min(l, r, mid + 1, R, seg << 1 | 1));
  return res;
}
int main() {
  scanf("%d %d %d %d", &n, &m, &k, &q);
  for (int i = 1; i <= k; i++) {
    int first, second;
    scanf("%d %d", &first, &second);
    vec.push_back(pii(first, second));
  }
  for (int i = 1; i <= q; i++) R[i].input(i);
  sort(vec.begin(), vec.end());
  sort(R + 1, R + q + 1, cmp);
  int cv = 1, cr = 0;
  init();
  for (int i = 1; i <= n; i++) {
    while (cr < vec.size() && vec[cr].first == i) {
      update(vec[cr].second, i, 1, m, 1);
      cr++;
    }
    while (cv <= q && R[cv].first[1] == i) {
      int t = get_min(R[cv].second[0], R[cv].second[1], 1, m, 1);
      if (t < R[cv].first[0]) vis[R[cv].id]++;
      cv++;
    }
  }
  init();
  sort(vec.begin(), vec.end(), cmp_vec);
  sort(R + 1, R + q + 1, cmp1);
  cr = 0, cv = 1;
  for (int i = 1; i <= m; i++) {
    while (cr < vec.size() && vec[cr].second == i) {
      update(vec[cr].first, i, 1, n, 1);
      cr++;
    }
    while (cv <= q && R[cv].second[1] == i) {
      int t = get_min(R[cv].first[0], R[cv].first[1], 1, n, 1);
      if (t < R[cv].second[0]) vis[R[cv].id]++;
      cv++;
    }
  }
  for (int i = 1; i <= q; i++) {
    if (vis[i] == 2)
      puts("NO");
    else
      puts("YES");
  }
  return 0;
}
