#include <bits/stdc++.h>
using namespace std;
struct no {
  int e[1000000], d[1000000], mn[1000000];
  void build(int i, int ini, int fim) {
    e[i] = ini, d[i] = fim;
    mn[i] = -1;
    if (ini != fim) {
      int m = (ini + fim) / 2;
      build(2 * i, ini, m);
      build(2 * i + 1, m + 1, fim);
    }
  }
  bool in(int i, int a, int b) { return a <= e[i] && b >= d[i]; }
  bool out(int i, int a, int b) { return a > d[i] || e[i] > b; }
  int get(int i, int ini, int fim) {
    if (out(i, ini, fim)) return 1000000;
    if (in(i, ini, fim)) {
      return mn[i];
    }
    return min(get(2 * i, ini, fim), get(2 * i + 1, ini, fim));
  }
  void update(int i, int ini, int fim, int val) {
    if (out(i, ini, fim)) return;
    if (in(i, ini, fim)) {
      mn[i] = val;
      return;
    }
    update(2 * i, ini, fim, val);
    update(2 * i + 1, ini, fim, val);
    mn[i] = min(mn[2 * i], mn[2 * i + 1]);
  }
};
no tree;
int x1[1000000], y[1000000], x2[1000000], y2[1000000];
int X[1000000], Y[1000000];
int n, m, k, q;
vector<int> T[1000000];
int ans[1000000];
vector<int> Q[1000000];
int main() {
  cin >> n >> m >> k >> q;
  for (int i = 0; i < k; i++) scanf("%d %d", &X[i], &Y[i]), X[i]--, Y[i]--;
  for (int i = 0; i < q; i++) scanf("%d%d%d%d", &x1[i], &y[i], &x2[i], &y2[i]);
  for (int i = 0; i < q; i++) x1[i]--, x2[i]--, y[i]--, y2[i]--;
  for (int vezes = 0; vezes < 2; vezes++) {
    for (int i = 0; i < k; i++) {
      T[Y[i]].push_back(i);
    }
    for (int i = 0; i < q; i++) {
      Q[y2[i]].push_back(i);
    }
    tree.build(1, 0, n - 1);
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < T[i].size(); j++) {
        int id = T[i][j];
        tree.update(1, X[id], X[id], Y[id]);
      }
      for (int j = 0; j < Q[i].size(); j++) {
        int id = Q[i][j];
        int x = tree.get(1, x1[id], x2[id]);
        if (x >= y[id]) {
          ans[id] = 1;
        }
      }
    }
    for (int i = 0; i < 1000000; i++) T[i].clear(), Q[i].clear();
    swap(n, m);
    for (int i = 0; i < q; i++) swap(x1[i], y[i]), swap(x2[i], y2[i]);
    for (int i = 0; i < k; i++) swap(X[i], Y[i]);
  }
  for (int i = 0; i < q; i++) {
    if (ans[i])
      printf("YES");
    else
      printf("NO");
    cout << endl;
  }
  return 0;
}
