#include <bits/stdc++.h>
using namespace std;
vector<pair<pair<pair<int, int>, pair<int, int> >, int> > r;
vector<pair<int, int> > horse;
vector<char> ans;
int n, m, q, k;
const int maxn = (int)1e5 + 123;
int tree[4 * maxn];
void init() { memset(tree, 0, sizeof(tree)); }
void put_(int v, int lt, int rt, int pos, int val) {
  if (lt == rt) {
    if (val > tree[v]) tree[v] = val;
  } else {
    int mt = (lt + rt) >> 1;
    if (pos <= mt) {
      put_(v + v, lt, mt, pos, val);
    } else {
      put_(v + v + 1, mt + 1, rt, pos, val);
    }
    tree[v] = min(tree[v + v], tree[v + v + 1]);
  }
}
void put(int pos, int val) { put_(1, 1, maxn, pos, val); }
int get_(int v, int lt, int rt, int l, int r) {
  if (lt == l && rt == r) {
    return tree[v];
  } else {
    int mt = (lt + rt) >> 1;
    if (r <= mt) return get_(v + v, lt, mt, l, r);
    if (mt + 1 <= l) return get_(v + v + 1, mt + 1, rt, l, r);
    return min(get_(v + v, lt, mt, l, mt),
               get_(v + v + 1, mt + 1, rt, mt + 1, r));
  }
}
int get(int lt, int rt) { return get_(1, 1, maxn, lt, rt); }
void solve() {
  init();
  int lt, rt, mn;
  int i = 0, j = 0;
  while (i < k || j < q) {
    if (i == k) {
      lt = r[j].first.second.first;
      rt = r[j].first.second.second;
      mn = r[j].first.first.second;
      if (get(lt, rt) >= mn) {
        ans[r[j].second] |= 1;
      }
      ++j;
    } else if (j == q) {
      return;
    } else {
      if (horse[i].first <= r[j].first.first.first) {
        put(horse[i].second, horse[i].first);
        ++i;
      } else {
        lt = r[j].first.second.first;
        rt = r[j].first.second.second;
        mn = r[j].first.first.second;
        if (get(lt, rt) >= mn) {
          ans[r[j].second] |= 1;
        }
        ++j;
      }
    }
  }
}
int main() {
  cin >> n >> m >> k >> q;
  ans.resize(q, 0);
  horse.resize(k);
  for (int i = 0; i < k; ++i) {
    cin >> horse[i].second >> horse[i].first;
  }
  r.resize(q);
  for (int i = 0; i < q; ++i) {
    cin >> r[i].first.second.first >> r[i].first.first.first;
    cin >> r[i].first.second.second >> r[i].first.first.second;
    r[i].second = i;
  }
  sort(horse.begin(), horse.end());
  for (int i = 0; i < q; ++i) {
    swap(r[i].first.first.first, r[i].first.first.second);
  }
  sort(r.begin(), r.end());
  solve();
  for (int i = 0; i < q; ++i) {
    swap(r[i].first.first.first, r[i].first.first.second);
  }
  for (int i = 0; i < k; ++i) {
    swap(horse[i].first, horse[i].second);
  }
  sort(horse.begin(), horse.end());
  for (int i = 0; i < q; ++i) {
    swap(r[i].first.first, r[i].first.second);
  }
  for (int i = 0; i < q; ++i) {
    swap(r[i].first.first.first, r[i].first.first.second);
  }
  sort(r.begin(), r.end());
  solve();
  for (int i = 0; i < q; ++i) {
    if (ans[i]) {
      cout << "YES";
    } else {
      cout << "NO";
    }
    cout << "\n";
  }
  return 0;
}
