#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5, inf = 2e9;
int tot, mx[N * 30], ls[N * 30], rs[N * 30], rt[N];
void upt(int &p, int l, int r, int pos, int v) {
  ++tot;
  mx[tot] = mx[p], ls[tot] = ls[p], rs[tot] = rs[p];
  p = tot;
  if (l == r) {
    mx[p] = min(mx[p], v);
    return;
  }
  int mid = (l + r) >> 1;
  if (pos <= mid)
    upt(ls[p], l, mid, pos, v);
  else
    upt(rs[p], mid + 1, r, pos, v);
  mx[p] = max(mx[ls[p]], mx[rs[p]]);
}
int query(int p, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) return mx[p];
  if (!p) return inf;
  int mid = (l + r) >> 1, res = 0;
  if (ql <= mid) res = max(res, query(ls[p], l, mid, ql, qr));
  if (mid < qr) res = max(res, query(rs[p], mid + 1, r, ql, qr));
  return res;
}
struct line {
  int l, r, id;
} a[N];
bool cmp(line i, line j) { return i.l > j.l; }
signed main() {
  ios::sync_with_stdio(false);
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 1; i <= k; ++i) cin >> a[i].l >> a[i].r >> a[i].id;
  memset(mx, 0x3f, sizeof(mx));
  sort(a + 1, a + k + 1, cmp);
  for (int i = 1; i <= k; ++i)
    rt[i] = rt[i - 1], upt(rt[i], 1, n, a[i].id, a[i].r);
  while (m--) {
    int A, B, x, y;
    cin >> A >> B >> x >> y;
    int res = 0, l = 1, r = k;
    while (l <= r) {
      int mid = (l + r) >> 1;
      if (a[mid].l >= x)
        l = mid + 1, res = mid;
      else
        r = mid - 1;
    }
    if (res) {
      int tmp = query(rt[res], 1, n, A, B);
      if (tmp <= y)
        cout << "yes" << endl;
      else
        cout << "no" << endl;
    } else
      cout << "no" << endl;
  }
}
