#include <bits/stdc++.h>
using namespace std;
bool ans[310000];
struct Query {
  int x1, y1, x2, y2, id;
} querys[310000];
bool operator<(Query a, Query b) { return a.x2 < b.x2; }
struct Point {
  int x, y;
} points[310000];
bool operator<(Point a, Point b) { return a.x < b.x; }
int minv[310000 << 2];
void pushup(int o) { minv[o] = min(minv[((o) << 1)], minv[((o) << 1 | 1)]); }
void update(int o, int L, int R, int x, int val) {
  if (L == R) {
    minv[o] = val;
    return;
  }
  int M = (L + R) >> 1;
  if (x <= M)
    update(((o) << 1), L, M, x, val);
  else
    update(((o) << 1 | 1), M + 1, R, x, val);
  pushup(o);
}
int query(int o, int L, int R, int ql, int qr) {
  if (ql <= L && R <= qr) return minv[o];
  int M = (L + R) >> 1;
  int ans = 0x3f3f3f3f;
  if (ql <= M) ans = min(ans, query(((o) << 1), L, M, ql, qr));
  if (qr > M) ans = min(ans, query(((o) << 1 | 1), M + 1, R, ql, qr));
  return ans;
}
int main() {
  int n, m, t, q;
  scanf("%d%d%d%d", &n, &m, &t, &q);
  for (int i = 1; i <= t; i++) scanf("%d%d", &points[i].x, &points[i].y);
  for (int i = 1; i <= q; i++)
    scanf("%d%d%d%d", &querys[i].x1, &querys[i].y1, &querys[i].x2,
          &querys[i].y2),
        querys[i].id = i;
  sort(points + 1, points + t + 1);
  sort(querys + 1, querys + q + 1);
  for (int i = 1, j = 1; i <= q; i++) {
    while (j <= t && points[j].x <= querys[i].x2) {
      update(1, 1, m, points[j].y, points[j].x);
      j++;
    }
    ans[querys[i].id] |=
        query(1, 1, m, querys[i].y1, querys[i].y2) >= querys[i].x1;
  }
  swap(n, m);
  for (int i = 1; i <= t; i++) swap(points[i].x, points[i].y);
  for (int i = 1; i <= q; i++) {
    swap(querys[i].x1, querys[i].y1);
    swap(querys[i].x2, querys[i].y2);
  }
  sort(points + 1, points + t + 1);
  sort(querys + 1, querys + q + 1);
  memset(minv, 0, sizeof(minv));
  for (int i = 1, j = 1; i <= q; i++) {
    while (j <= t && points[j].x <= querys[i].x2) {
      update(1, 1, m, points[j].y, points[j].x);
      j++;
    }
    ans[querys[i].id] |=
        query(1, 1, m, querys[i].y1, querys[i].y2) >= querys[i].x1;
  }
  for (int i = 1; i <= q; i++) {
    if (ans[i])
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
