#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100100;
int r[3 * MAXN], root[3 * MAXN], h[3 * MAXN], l[3 * MAXN], p[3 * MAXN];
int tr[60 * MAXN], ls[60 * MAXN], rs[60 * MAXN];
set<pair<int, int> > s;
int cnt, n, m, k;
bool cmp(const int &o, const int &p) { return r[o] < r[p]; }
void build(int &o, int L, int R) {
  o = ++cnt;
  if (L + 1 == R) return;
  build(ls[o], L, ((L + R) >> 1));
  build(rs[o], ((L + R) >> 1), R);
}
void build(int o, int &p, int L, int R, int pos, int val) {
  p = ++cnt;
  if (L + 1 == R) {
    tr[p] = max(tr[o], val);
    return;
  }
  if (pos < ((L + R) >> 1)) {
    build(ls[o], ls[p], L, ((L + R) >> 1), pos, val);
    rs[p] = rs[o];
  } else {
    build(rs[o], rs[p], ((L + R) >> 1), R, pos, val);
    ls[p] = ls[o];
  }
  tr[p] = min(tr[ls[p]], tr[rs[p]]);
}
int getans(int o, int L, int R, int l, int r) {
  if (l <= L && R <= r) {
    return tr[o];
  }
  int ret = 1e9;
  if (l < ((L + R) >> 1)) {
    ret = getans(ls[o], L, ((L + R) >> 1), l, r);
  }
  if (r > ((L + R) >> 1)) {
    ret = min(ret, getans(rs[o], ((L + R) >> 1), R, l, r));
  }
  return ret;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < k; ++i) {
    scanf("%d%d%d", &l[i], &r[i], &p[i]);
    h[i] = i;
  }
  sort(h, h + k, cmp);
  build(root[0], 0, n);
  s.insert(pair<int, int>(0, 0));
  for (int T = 0; T < k; ++T) {
    auto i = h[T];
    build(root[T], root[T + 1], 0, n, p[i] - 1, l[i]);
    s.insert(pair<int, int>(r[i], T + 1));
  }
  while (m--) {
    int a, b, x, y;
    scanf("%d%d%d%d", &a, &b, &x, &y);
    auto last = s.lower_bound(pair<int, int>(y + 1, -1));
    last--;
    printf("%s\n",
           getans(root[last->second], 0, n, a - 1, b) >= x ? "yes" : "no");
    fflush(stdout);
  }
  return 0;
}
