#include <bits/stdc++.h>
using namespace std;
int n, m, k, mn[300005];
pair<pair<int, int>, int> a[300005];
struct _ {
  int gt;
  _ *L, *R;
};
_ *ver[300005];
void build(_ *id, int l, int r) {
  if (l == r) {
    id->gt = 2e9;
    return;
  }
  int mid = (l + r) / 2;
  id->L = new _;
  id->R = new _;
  id->gt = 2e9;
  build(id->L, l, mid);
  build(id->R, mid + 1, r);
}
_ *update(_ *oid, int l, int r, int vt, int gt) {
  _ *cur = new _;
  if (l == r) {
    cur->gt = gt;
    return cur;
  }
  int mid = (l + r) / 2;
  if (vt <= mid) {
    cur->L = update(oid->L, l, mid, vt, gt);
    cur->R = oid->R;
    cur->gt = max(cur->L->gt, cur->R->gt);
  } else {
    cur->L = oid->L;
    cur->R = update(oid->R, mid + 1, r, vt, gt);
    cur->gt = max(cur->L->gt, cur->R->gt);
  }
  return cur;
}
int get(_ *id, int l, int r, int u, int v) {
  if (r < u || l > v) return 0;
  if (l >= u && r <= v) return id->gt;
  int mid = (l + r) / 2;
  return max(get(id->L, l, mid, u, v), get(id->R, mid + 1, r, u, v));
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.flush().tie(0);
  cin >> n >> m >> k;
  for (int i = 1; i <= k; ++i) {
    cin >> a[i].first.first >> a[i].first.second >> a[i].second;
    mn[i] = 2e9;
  }
  sort(a + 1, a + k + 1);
  ver[k + 1] = new _;
  build(ver[k + 1], 1, n);
  for (int i = k; i > 0; --i) {
    if (a[i].first.second < mn[a[i].second]) {
      mn[a[i].second] = a[i].first.second;
      ver[i] = update(ver[i + 1], 1, n, a[i].second, a[i].first.second);
    } else
      ver[i] = ver[i + 1];
  }
  while (m--) {
    int A, B, x, y;
    cin >> A >> B >> x >> y;
    int L, R, vt;
    L = 1;
    R = k;
    vt = n + 1;
    while (L <= R) {
      int mid = (L + R) / 2;
      if (a[mid].first.first >= x) {
        vt = mid;
        R = mid - 1;
      } else
        L = mid + 1;
    }
    if (vt == k + 1)
      cout << "no";
    else {
      if (get(ver[vt], 1, n, A, B) > y)
        cout << "no";
      else
        cout << "yes";
    }
    cout << '\n';
    cout.flush();
  }
  return 0;
}
