#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
const int maxn = 100100;
const int maxm = 200100;
int n, m, k, q;
vector<int> x[maxn];
vector<int> y[maxn];
bool isGood[maxm];
int xl[maxm], yl[maxm], xr[maxm], yr[maxm];
int p[maxm];
int t[4 * maxm];
bool compareX(int i, int j) { return (xr[i] < xr[j]); }
bool compareY(int i, int j) { return (yr[i] < yr[j]); }
void update(int v, int tl, int tr, int pos, int val) {
  if (tl == tr) {
    t[v] = val;
  } else {
    int tm = (tl + tr) / 2;
    if (pos <= tm) {
      update(v * 2, tl, tm, pos, val);
    } else {
      update(v * 2 + 1, tm + 1, tr, pos, val);
    }
    t[v] = min(t[v * 2], t[v * 2 + 1]);
  }
}
int getMin(int v, int tl, int tr, int l, int r) {
  if (l > tr || r < tl) {
    return inf;
  }
  if (l <= tl && tr <= r) {
    return t[v];
  }
  int tm = (tl + tr) / 2;
  return min(getMin(v * 2, tl, tm, l, r), getMin(v * 2 + 1, tm + 1, tr, l, r));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m >> k >> q;
  for (int i = 1; i <= k; i++) {
    int xx, yy;
    cin >> xx >> yy;
    x[xx].push_back(yy);
    y[yy].push_back(xx);
  }
  for (int i = 1; i <= q; i++) {
    cin >> xl[i] >> yl[i] >> xr[i] >> yr[i];
  }
  for (int i = 1; i <= q; i++) {
    p[i] = i;
  }
  sort(p + 1, p + q + 1, compareX);
  int j = 1;
  for (int i = 1; i <= n; i++) {
    for (__typeof((x[i]).begin()) it = (x[i]).begin(); it != (x[i]).end();
         it++) {
      int y = *it;
      update(1, 1, m, y, i);
    }
    while (j <= q && xr[p[j]] == i) {
      if (getMin(1, 1, m, yl[p[j]], yr[p[j]]) >= xl[p[j]]) {
        isGood[p[j]] = true;
      }
      j++;
    }
  }
  for (int i = 1; i <= q; i++) {
    p[i] = i;
  }
  memset(t, 0, sizeof(t));
  sort(p + 1, p + q + 1, compareY);
  j = 1;
  for (int i = 1; i <= m; i++) {
    for (__typeof((y[i]).begin()) it = (y[i]).begin(); it != (y[i]).end();
         it++) {
      int x = *it;
      update(1, 1, n, x, i);
    }
    while (j <= q && yr[p[j]] == i) {
      if (getMin(1, 1, n, xl[p[j]], xr[p[j]]) >= yl[p[j]]) {
        isGood[p[j]] = true;
      }
      j++;
    }
  }
  for (int i = 1; i <= q; i++) {
    cout << (isGood[i] ? "YES" : "NO") << "\n";
  }
  return 0;
}
