#include <bits/stdc++.h>
using namespace std;
const int INF = int(2e9 + 1);
const long long INFll = 1ll * INF * INF;
const long double ldINF = 1e+018;
const long double EPS = 0.000000001;
const int base = INF;
const int MOD = 1e9 + 7;
const int sdx[4] = {0, 1, 0, -1};
const int sdy[4] = {1, 0, -1, 0};
const int px[2] = {1, -1};
const int py[2] = {1, -1};
int n, m, k, q;
vector<int> c, r, t;
vector<vector<int> > g, h;
int N;
void modify(int p, int value) {
  for (t[p += N] = value; p > 1; p >>= 1) t[p >> 1] = min(t[p], t[p ^ 1]);
}
void build() {
  for (int i = N - 1; i > 0; i--) t[i] = min(t[i << 1], t[i << 1 | 1]);
}
int query(int l, int r) {
  int res = INF;
  for (l += N, r += N; l < r; l >>= 1, r >>= 1) {
    if (l & 1) res = min(res, t[l++]);
    if (r & 1) res = min(res, t[--r]);
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m >> k >> q;
  N = m;
  t.resize(2 * m, -INF);
  g.resize(n);
  h.resize(m);
  for (int i = 0; i < k; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    g[x].push_back(y);
    h[y].push_back(x);
  }
  vector<pair<pair<pair<int, int>, pair<int, int> >, int> > x, y;
  for (int i = 0; i < q; i++) {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    a--;
    b--;
    c--;
    d--;
    x.push_back(make_pair(make_pair(make_pair(c, a), make_pair(b, d)), i));
    y.push_back(make_pair(make_pair(make_pair(d, b), make_pair(a, c)), i));
  }
  sort(x.begin(), x.end());
  sort(y.begin(), y.end());
  int p = 0;
  vector<int> ans(q);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < g[i].size(); j++) modify(g[i][j], i);
    while (p < x.size() && x[p].first.first.first == i) {
      int a = x[p].first.first.first, b = x[p].first.first.second,
          c = x[p].first.second.first, d = x[p].first.second.second,
          num = x[p].second;
      int q = query(c, d + 1);
      if (q != -INF && q >= b) ans[num] = 1;
      p++;
    }
  }
  t.clear();
  t.resize(2 * n, -INF);
  N = n;
  p = 0;
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < h[i].size(); j++) modify(h[i][j], i);
    while (p < y.size() && y[p].first.first.first == i) {
      int a = y[p].first.first.first, b = y[p].first.first.second,
          c = y[p].first.second.first, d = y[p].first.second.second,
          num = y[p].second;
      int q = query(c, d + 1);
      if (q != -INF && q >= b) ans[num] = 1;
      p++;
    }
  }
  for (int i = 0; i < q; i++)
    if (ans[i] == 1)
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
  return 0;
}
