#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5, M = 6e6 + 5, inf = 1e9 + 1;
int n, m, K, rt[N], sl, ql[N], tot;
struct segment {
  int l, r, p;
  segment(int l = 0, int r = 0, int p = 0) : l(l), r(r), p(p) {}
  bool operator<(segment t) const { return l < t.l; }
} s[N];
struct data {
  int v, ls, rs;
  data(int v = inf, int ls = 0, int rs = 0) : v(v), ls(ls), rs(rs) {}
} t[M];
void ins(int k, int &nk, int l, int r, int x, int y) {
  nk = ++tot;
  t[nk] = t[k];
  if (l == r) {
    t[nk].v = min(t[nk].v, y);
    return;
  }
  int mid = l + r >> 1;
  if (x <= mid)
    ins(t[k].ls, t[nk].ls, l, mid, x, y);
  else
    ins(t[k].rs, t[nk].rs, mid + 1, r, x, y);
  t[nk].v = max(t[t[nk].ls].v, t[t[nk].rs].v);
}
int qry(int k, int l, int r, int x, int y) {
  if (!k) return inf;
  if (x <= l && r <= y) return t[k].v;
  int mid = l + r >> 1, res = 0;
  if (x <= mid) res = max(res, qry(t[k].ls, l, mid, x, y));
  if (y > mid) res = max(res, qry(t[k].rs, mid + 1, r, x, y));
  return res;
}
int main() {
  scanf("%d%d%d", &n, &m, &K);
  for (int i = (1); i <= (K); i++)
    scanf("%d%d%d", &s[i].l, &s[i].r, &s[i].p), ql[++sl] = s[i].l;
  sort(s + 1, s + 1 + K);
  sort(ql + 1, ql + 1 + sl);
  sl = unique(ql + 1, ql + 1 + sl) - ql - 1;
  for (int i = K, j; i; i = j) {
    int l = lower_bound(ql + 1, ql + 1 + sl, s[i].l) - ql;
    rt[l] = rt[l + 1];
    for (j = i; j && s[i].l == s[j].l; j--)
      ins(rt[l], rt[l], 1, n, s[j].p, s[j].r);
  }
  while (m--) {
    int a, b, x, y;
    scanf("%d%d%d%d", &a, &b, &x, &y);
    x = lower_bound(ql + 1, ql + 1 + sl, x) - ql;
    if (x > sl)
      puts("no");
    else {
      if (qry(rt[x], 1, n, a, b) > y)
        puts("no");
      else
        puts("yes");
    }
    fflush(stdout);
  }
  return 0;
}
