#include <bits/stdc++.h>
using namespace std;
int n, m, k, q;
int ans[100005 << 1];
int tree[100005 << 2];
struct Point {
  int x, y;
  bool operator<(const Point &a) const { return x < a.x; }
} point[100005 << 1];
struct Node {
  int id;
  int x1, x2, y1, y2;
  bool operator<(const Node &a) const { return x2 < a.x2; }
} que[100005 << 1];
void pushUp(int rt) { tree[rt] = min(tree[rt << 1], tree[rt << 1 | 1]); }
void update(int num, int pos, int l, int r, int rt) {
  if (l == r) {
    tree[rt] = num;
    return;
  }
  int m = (l + r) >> 1;
  if (pos <= m)
    update(num, pos, l, m, rt << 1);
  else
    update(num, pos, m + 1, r, rt << 1 | 1);
  pushUp(rt);
}
int query(int ll, int rr, int l, int r, int rt) {
  int res = 1000000000;
  if (ll <= l && r <= rr) {
    return tree[rt];
  }
  int m = (l + r) >> 1;
  if (ll <= m) res = min(res, query(ll, rr, l, m, rt << 1));
  if (rr > m) res = min(res, query(ll, rr, m + 1, r, rt << 1 | 1));
  return res;
}
int main() {
  while (scanf("%d%d%d%d", &n, &m, &k, &q) != EOF) {
    memset(ans, 0, sizeof(ans));
    memset(tree, 0, sizeof(tree));
    int cnt = max(n, m);
    for (int i = 0; i < k; i++) {
      scanf("%d%d", &point[i].x, &point[i].y);
    }
    for (int i = 0; i < q; i++) {
      scanf("%d%d%d%d", &que[i].x1, &que[i].y1, &que[i].x2, &que[i].y2);
      que[i].id = i;
    }
    sort(point, point + k);
    sort(que, que + q);
    for (int i = 0, j = 0; i < q; i++) {
      while (j < k && point[j].x <= que[i].x2) {
        update(point[j].x, point[j].y, 1, cnt, 1);
        j++;
      }
      ans[que[i].id] |= query(que[i].y1, que[i].y2, 1, cnt, 1) >= que[i].x1;
    }
    for (int i = 0; i < k; i++) swap(point[i].x, point[i].y);
    for (int i = 0; i < q; i++) {
      swap(que[i].x1, que[i].y1);
      swap(que[i].x2, que[i].y2);
    }
    sort(point, point + k);
    sort(que, que + q);
    memset(tree, 0, sizeof(tree));
    for (int i = 0, j = 0; i < q; i++) {
      while (j < k && point[j].x <= que[i].x2) {
        update(point[j].x, point[j].y, 1, cnt, 1);
        j++;
      }
      ans[que[i].id] |= query(que[i].y1, que[i].y2, 1, cnt, 1) >= que[i].x1;
    }
    for (int i = 0; i < q; i++) {
      if (ans[i])
        puts("YES");
      else
        puts("NO");
    }
  }
  return 0;
}
