#include <bits/stdc++.h>
using namespace std;
struct eventline {
  int type;
  int coord;
  int original;
  int r1, r2;
  int index;
  bool operator<(const eventline &other) const {
    if (coord == other.coord) return type < other.type;
    return coord < other.coord;
  }
};
const int BT = 131072;
int itree[BT * 2];
int n, m, q, K;
int safe[200003];
struct {
  int x1, y1, x2, y2;
} linedat[200003];
int getrange(int a, int b) {
  int res = INT_MAX;
  a += BT;
  b += BT;
  while (a <= b) {
    if (a & 1) res = min(res, itree[a]);
    if (!(b & 1)) res = min(res, itree[b]);
    a = (a + 1) >> 1;
    b = (b - 1) >> 1;
  }
  return res;
}
void solve(vector<eventline> &events) {
  memset(itree, 0, sizeof(itree));
  for (const auto &ev : events) {
    if (ev.type == 0) {
      int p = ev.r1 + BT;
      itree[p] = ev.coord;
      while (p >>= 1) {
        itree[p] = min(itree[p << 1], itree[(p << 1) + 1]);
      }
    } else {
      int minval = getrange(ev.r1, ev.r2);
      if (minval >= ev.original) {
        safe[ev.index] = 1;
      }
    }
  }
}
int main() {
  vector<pair<int, int>> rook;
  scanf("%d%d%d%d", &n, &m, &K, &q);
  for (int i = 0; i < K; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    rook.emplace_back(x, y);
  }
  vector<eventline> linehor, linever;
  for (int i = 0; i < K; i++) {
    eventline line;
    line.type = 0;
    line.coord = rook[i].second;
    line.original = rook[i].second;
    line.r1 = line.r2 = rook[i].first;
    line.index = -1;
    linehor.push_back(line);
  }
  for (int i = 0; i < K; i++) {
    eventline line;
    line.type = 0;
    line.coord = rook[i].first;
    line.original = rook[i].first;
    line.r1 = line.r2 = rook[i].second;
    line.index = -1;
    linever.push_back(line);
  }
  for (int i = 0; i < q; i++) {
    int x1, y1, x2, y2;
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    linedat[i].x1 = x1;
    linedat[i].y1 = y1;
    linedat[i].x2 = x2;
    linedat[i].y2 = y2;
    {
      eventline line;
      line.type = 2;
      line.original = x1;
      line.coord = x2;
      line.r1 = y1;
      line.r2 = y2;
      line.index = i;
      linever.push_back(line);
    }
    {
      eventline line;
      line.type = 2;
      line.original = y1;
      line.coord = y2;
      line.r1 = x1;
      line.r2 = x2;
      line.index = i;
      linehor.push_back(line);
    }
  }
  sort(linehor.begin(), linehor.end());
  solve(linehor);
  sort(linever.begin(), linever.end());
  solve(linever);
  for (int i = 0; i < q; i++) {
    puts(safe[i] ? "YES" : "NO");
  }
  return 0;
}
