#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T a) {
  return ((a < 0) ? -a : a);
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
bool solve(int);
int main() {
  int test = 0;
  while (solve(test)) {
    ++test;
  }
  return 0;
}
const int N = 100500;
int n, m, k, q;
struct query {
  int x1, y1, x2, y2;
  int idx;
};
bool operator<(const query& a, const query& b) { return a.y2 < b.y2; }
const int Q = 200500;
query a[Q];
pair<int, int> b[Q];
bool cmpY(const pair<int, int>& a, const pair<int, int>& b) {
  return a.second < b.second;
}
int t[4 * N];
void put(int pos, int val, int v, int lf, int rg) {
  if (lf == rg) {
    t[v] = val;
    return;
  }
  int mid = (lf + rg) / 2;
  if (pos <= mid)
    put(pos, val, v * 2 + 1, lf, mid);
  else
    put(pos, val, v * 2 + 2, mid + 1, rg);
  t[v] = min(t[v * 2 + 1], t[v * 2 + 2]);
}
const int INF = 1e9 + 300;
int get(int from, int to, int v, int lf, int rg) {
  if (from == lf && to == rg) return t[v];
  int mid = (lf + rg) / 2;
  int res = INF;
  if (from <= mid) res = min(res, get(from, min(to, mid), v * 2 + 1, lf, mid));
  if (to > mid)
    res = min(res, get(max(from, mid + 1), to, v * 2 + 2, mid + 1, rg));
  return res;
}
int ans[Q];
void calc() {
  for (int i = int(1); i < int(int(n) + 1); ++i) put(i, -1, 0, 1, n);
  sort(b, b + k, cmpY);
  sort(a, a + q);
  int j = 0;
  for (int i = int(0); i < int(k); ++i) {
    while (j < q && a[j].y2 < b[i].second) {
      if (get(a[j].x1, a[j].x2, 0, 1, n) >= a[j].y1) ++ans[a[j].idx];
      ++j;
    }
    put(b[i].first, b[i].second, 0, 1, n);
  }
  while (j < q) {
    if (get(a[j].x1, a[j].x2, 0, 1, n) >= a[j].y1) ++ans[a[j].idx];
    ++j;
  }
}
bool solve(int) {
  if (scanf("%d%d%d%d", &n, &m, &k, &q) != 4) return false;
  for (int i = int(0); i < int(k); ++i) {
    int first, second;
    assert(scanf("%d%d", &first, &second) == 2);
    b[i] = pair<int, int>(first, second);
  }
  for (int i = int(0); i < int(q); ++i) {
    assert(scanf("%d%d%d%d", &a[i].x1, &a[i].y1, &a[i].x2, &a[i].y2) == 4);
    a[i].idx = i;
  }
  for (int _ = int(0); _ < int(2); ++_) {
    calc();
    swap(n, m);
    for (int i = int(0); i < int(k); ++i) swap(b[i].first, b[i].second);
    for (int i = int(0); i < int(q); ++i) {
      swap(a[i].x1, a[i].y1);
      swap(a[i].x2, a[i].y2);
    }
  }
  for (int i = int(0); i < int(q); ++i) {
    puts(ans[i] == 0 ? "NO" : "YES");
  }
  return true;
}
