#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 7;
const int M = 1e9;
const int inf = 1e9 + 7;
const long long base = 1e18;
const double pi = acos(-1);
const double ep = 1e-9;
int n, m, k, q;
vector<pair<int, int> > rook;
pair<int, int> x[N], y[N];
int id[N];
int a[N * 3], ans[N];
void update(int i, int l, int r, int x, int gt) {
  if (l == x && r == x) {
    a[i] = gt;
    return;
  }
  int g = (l + r) >> 1, next = i << 1;
  if (x <= g)
    update(next, l, g, x, gt);
  else
    update(next + 1, g + 1, r, x, gt);
  a[i] = max(a[next], a[next + 1]);
}
bool cmp(int i, int j) { return x[i] < x[j]; }
int get(int i, int l, int r, int u, int v) {
  if (l == u && r == v) {
    return a[i];
  }
  int g = (l + r) >> 1, next = i << 1;
  int tmp = 0;
  if (u <= g) tmp = max(tmp, get(next, l, g, u, min(g, v)));
  if (g < v) tmp = max(tmp, get(next + 1, g + 1, r, max(u, g + 1), v));
  return tmp;
}
void solve() {
  for (int i = (int)1; i < (int)m + 1; i++) {
    update(1, 1, m, i, inf);
  }
  int j = k - 1;
  int i = q - 1;
  for (int X = n; X > 0; X--) {
    while (j >= 0 && rook[j].first >= X) {
      update(1, 1, m, rook[j].second, rook[j].first);
      j--;
    }
    while (i >= 0 && x[id[i]].first == X) {
      int cur = id[i];
      int tmp = get(1, 1, m, y[cur].first, y[cur].second);
      if (tmp <= x[cur].second) ans[cur] = 1;
      i--;
    }
  }
}
int main() {
  cin >> n >> m >> k >> q;
  for (int i = (int)0; i < (int)k; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    rook.push_back(make_pair(u, v));
  }
  for (int i = (int)0; i < (int)q; i++) {
    int u, v;
    scanf("%d%d", &x[i].first, &y[i].first);
    scanf("%d%d", &x[i].second, &y[i].second);
    id[i] = i;
  }
  sort(rook.begin(), rook.end());
  sort(id, id + q, cmp);
  solve();
  for (int i = (int)0; i < (int)k; i++) swap(rook[i].first, rook[i].second);
  for (int i = (int)0; i < (int)q; i++) {
    swap(x[i].first, y[i].first);
    swap(x[i].second, y[i].second);
  }
  swap(n, m);
  sort(rook.begin(), rook.end());
  sort(id, id + q, cmp);
  solve();
  for (int i = (int)0; i < (int)q; i++)
    if (ans[i])
      puts("YES");
    else
      puts("NO");
}
