#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000, MAX = 100000, N = 300000;
int n, m, ST[4 * MAX + 5];
bool h[N + 5];
pair<int, int> a[N + 5];
pair<pair<pair<int, int>, pair<int, int> >, int> b[N + 5];
vector<int> x[MAX + 5], y[MAX + 5];
int update(int i, int b, int s, int x, int t) {
  if (x > s || x < b) return ST[i];
  if (b == s) return ST[i] = t;
  int o = (b + s) / 2;
  return ST[i] =
             max(update(2 * i, b, o, x, t), update(2 * i + 1, o + 1, s, x, t));
}
int query(int i, int b, int s, int x, int y) {
  if (x > s || y < b) return 0;
  if (x <= b && y >= s) return ST[i];
  int o = (b + s) / 2;
  return max(query(2 * i, b, o, x, y), query(2 * i + 1, o + 1, s, x, y));
}
void solve() {
  memset(ST, 0, sizeof ST);
  for (int i = 1; i <= MAX; i++) {
    x[i].clear();
    y[i].clear();
  }
  sort(a + 1, a + n + 1);
  sort(b + 1, b + m + 1);
  for (int i = 1; i <= n; i++) {
    x[a[i].first].push_back(a[i].second);
    y[a[i].second].push_back(a[i].first);
  }
  for (int i = 1; i <= MAX; i++) {
    y[i].push_back(inf);
    sort(y[i].begin(), y[i].end());
    update(1, 1, MAX, i, y[i].front());
  }
  int cx = 1;
  for (int i = 1; i <= m; i++) {
    for (; cx < b[i].first.first.first; cx++) {
      for (int j = 0; j < x[cx].size(); j++)
        update(1, 1, MAX, x[cx][j],
               *upper_bound(y[x[cx][j]].begin(), y[x[cx][j]].end(), cx));
    }
    if (query(1, 1, MAX, b[i].first.first.second, b[i].first.second.second) <=
        b[i].first.second.first) {
      h[b[i].second] = true;
    }
  }
}
int main() {
  scanf("%*d %*d %d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &a[i].first, &a[i].second);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d %d %d %d", &b[i].first.first.first, &b[i].first.first.second,
          &b[i].first.second.first, &b[i].first.second.second);
    b[i].second = i;
  }
  solve();
  for (int i = 1; i <= n; i++) {
    swap(a[i].first, a[i].second);
  }
  for (int i = 1; i <= m; i++) {
    swap(b[i].first.first.first, b[i].first.first.second);
    swap(b[i].first.second.first, b[i].first.second.second);
  }
  solve();
  for (int i = 1; i <= m; i++) {
    puts(h[i] ? "YES" : "NO");
  }
  return 0;
}
