#include <bits/stdc++.h>
using namespace std;
vector<int> u[200200], v[200200];
int x[200200], y[200200], xx[200200], yy[200200];
int n, m, k, q, id[200200], ans[200200];
bool cmp1(int i, int j) { return yy[i] < yy[j]; }
bool cmp2(int i, int j) { return xx[i] < xx[j]; }
const int inf = (1 << 30);
int Min[200200 + 200200];
void add(int a, int v) {
  a += n;
  Min[a] += v;
  for (; a > 1; a >>= 1)
    Min[a >> 1] = ((Min[a]) < (Min[a ^ 1]) ? (Min[a]) : (Min[a ^ 1]));
}
int MIN(int a, int b) {
  int res = inf;
  for (a += n, b += n; a <= b; a = (a + 1) >> 1, b = (b - 1) >> 1) {
    if (a & 1) res = ((res) < (Min[a]) ? (res) : (Min[a]));
    if (!(b & 1)) res = ((res) < (Min[b]) ? (res) : (Min[b]));
  }
  return res;
}
int main() {
  scanf("%d %d %d %d", &n, &m, &k, &q);
  for (int i = 0, a, b; i < k; i++) {
    scanf("%d %d", &a, &b);
    v[a].push_back(b);
    u[b].push_back(a);
  }
  for (int i = 0; i < q; i++)
    scanf("%d %d %d %d", x + i, y + i, xx + i, yy + i), id[i] = i;
  sort(id, id + q, cmp1);
  int st = 1;
  for (int i = 0, j; i < q; i++) {
    j = id[i];
    for (; st <= yy[j]; st++)
      for (int r = 0; r < u[st].size(); r++) {
        int t = u[st][r];
        add(t, st - Min[t + n]);
      }
    if (MIN(x[j], xx[j]) >= y[j]) ans[j] = 1;
  }
  sort(id, id + q, cmp2);
  st = 1;
  for (int i = 0; i < 200200 + 200200; i++) Min[i] = 0;
  n = m;
  for (int i = 0, j; i < q; i++) {
    j = id[i];
    for (; st <= xx[j]; st++)
      for (int r = 0; r < v[st].size(); r++) {
        int t = v[st][r];
        add(t, st - Min[t + n]);
      }
    if (MIN(y[j], yy[j]) >= x[j]) ans[j] = 1;
  }
  for (int i = 0; i < q; i++)
    if (ans[i])
      puts("YES");
    else
      puts("NO");
  return 0;
}
