#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, m, k, Le[N], R[N * 3], d, rt[N * 3], l, r, ans, L, c;
struct sg {
  int l, r, p;
  bool operator<(const sg& t) const { return r < t.r; }
} a[3 * N];
struct P {
  int mi, ls, rs;
} tr[N * 65];
void Ad(int nt, int ot, int z, int y) {
  tr[nt] = tr[ot];
  if (z == y) {
    tr[nt].mi = a[d].l;
    return;
  }
  int mid = z + y >> 1;
  if (a[d].p <= mid)
    Ad(tr[nt].ls = ++L, tr[ot].ls, z, mid);
  else
    Ad(tr[nt].rs = ++L, tr[ot].rs, mid + 1, y);
  tr[nt].mi = min(tr[tr[nt].ls].mi, tr[tr[nt].rs].mi);
}
void Qr(int nt, int z, int y) {
  if (z > r || y < l) return;
  if (z >= l && y <= r) {
    ans = min(ans, tr[nt].mi);
    return;
  }
  int mid = z + y >> 1;
  if (l <= mid) Qr(tr[nt].ls, z, mid);
  if (r > mid) Qr(tr[nt].rs, mid + 1, y);
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 1; i <= k; ++i) {
    scanf("%d %d %d", &a[i].l, &a[i].r, &a[i].p);
    R[i] = a[i].r;
  }
  sort(R + 1, R + k + 1);
  sort(a + 1, a + k + 1);
  for (int i = 1; i <= k; i++) {
    if (a[i].l > Le[a[i].p]) {
      Le[a[i].p] = a[i].l;
      d = i;
      Ad(rt[i] = ++L, rt[i - 1], 1, n);
    } else
      rt[i] = rt[i - 1];
  }
  int x, y;
  for (int i = 1; i <= m; ++i) {
    scanf("%d %d %d %d", &l, &r, &x, &y);
    c = upper_bound(R + 1, R + k + 1, y) - R - 1;
    ans = 2e9;
    Qr(rt[c], 1, n);
    if (ans >= x)
      puts("yes");
    else
      puts("no");
    cout.flush();
  }
}
