#include <bits/stdc++.h>
using namespace std;
struct evento {
  int x, y1, y2, ind;
  bool tipo;
};
const int MAXN = 3e5 + 3;
const int INF = 1e9 + 9;
vector<evento> v[2];
int seg[4 * MAXN], s[2][MAXN];
bitset<MAXN> resp;
int xx, yy, n, q, maior;
bool cmp(evento a, evento b) {
  if (a.x != b.x) return a.x < b.x;
  if (a.tipo != b.tipo) return a.tipo < b.tipo;
  if (a.y1 != b.y1) return a.y1 < b.y1;
  if (a.y2 != b.y2) return a.y2 < b.y2;
  return a.ind < b.ind;
}
void update(int sind, int ini, int fim, int ind, int val) {
  if (ind < ini || ind > fim) return;
  if (ini == fim) {
    seg[sind] = val;
    return;
  }
  int m = (ini + fim) / 2;
  int e = sind * 2;
  int d = e + 1;
  update(e, ini, m, ind, val);
  update(d, m + 1, fim, ind, val);
  seg[sind] = min(seg[e], seg[d]);
}
int query(int sind, int ini, int fim, int qini, int qfim) {
  if (qfim < ini || qini > fim) return INF;
  if (qini <= ini && qfim >= fim) return seg[sind];
  int m = (ini + fim) / 2;
  int e = sind * 2;
  int d = e + 1;
  return min(query(e, ini, m, qini, qfim), query(d, m + 1, fim, qini, qfim));
}
int main() {
  scanf("%d %d %d %d", &xx, &yy, &n, &q);
  for (int i = 0; i < n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    evento c, d;
    c.x = a;
    c.y1 = b;
    c.y2 = -1;
    c.ind = -1;
    c.tipo = 0;
    d.x = b;
    d.y1 = a;
    d.y2 = -1;
    d.ind = -1;
    d.tipo = 0;
    v[0].push_back(c);
    v[1].push_back(d);
  }
  for (int i = 0; i < q; i++) {
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    evento e, f;
    e.x = c;
    e.y1 = b;
    e.y2 = d;
    e.ind = i;
    e.tipo = 1;
    s[0][i] = a;
    f.x = d;
    f.y1 = a;
    f.y2 = c;
    f.ind = i;
    f.tipo = 1;
    s[1][i] = b;
    v[0].push_back(e);
    v[1].push_back(f);
  }
  sort(v[0].begin(), v[0].end(), cmp);
  sort(v[1].begin(), v[1].end(), cmp);
  for (int k = 0; k < 2; k++) {
    memset(seg, -1, sizeof seg);
    if (k)
      maior = xx;
    else
      maior = yy;
    for (int i = 0; i < n + q; i++) {
      if (v[k][i].tipo) {
        int men = query(1, 1, maior, v[k][i].y1, v[k][i].y2);
        if (men >= s[k][v[k][i].ind]) resp[v[k][i].ind] = 1;
      } else {
        update(1, 1, maior, v[k][i].y1, v[k][i].x);
      }
    }
  }
  for (int i = 0; i < q; i++) {
    if (resp[i])
      printf("YES\n");
    else
      printf("NO\n");
  }
}
