#include <bits/stdc++.h>
using namespace std;
int read() {
  int f, x, c;
  while (!isdigit(c = getchar()) && c != '-')
    ;
  c == '-' ? (f = 1, x = 0) : (f = 0, x = c - '0');
  while (isdigit(c = getchar())) x = (x << 3) + (x << 1) + c - '0';
  return f ? -x : x;
}
struct seg {
  int l, r, v;
} a[300010];
int n, m, k, LS[300010], lscnt;
int T[300010], mx[300010 * 60], ls[300010 * 60], rs[300010 * 60], tot;
bool cmp(seg a, seg b) { return a.l < b.l; }
void pushup(int now) { mx[now] = max(mx[ls[now]], mx[rs[now]]); }
void build(int &now, int l, int r) {
  now = ++tot;
  if (l == r) {
    mx[now] = 1e9;
    return;
  }
  int mid = l + r >> 1;
  build(ls[now], l, mid);
  build(rs[now], mid + 1, r);
  pushup(now);
}
void insert(int &now, int pre, int l, int r, int pos, int v) {
  now = ++tot, ls[now] = ls[pre], rs[now] = rs[pre], mx[now] = mx[pre];
  if (l == r) {
    mx[now] = min(mx[now], v);
    return;
  }
  int mid = l + r >> 1;
  if (pos <= mid)
    insert(ls[now], ls[pre], l, mid, pos, v);
  else
    insert(rs[now], rs[pre], mid + 1, r, pos, v);
  pushup(now);
}
int que(int now, int l, int r, int ql, int qr) {
  if (l == ql && r == qr) return mx[now];
  int mid = l + r >> 1;
  if (qr <= mid)
    return que(ls[now], l, mid, ql, qr);
  else if (ql > mid)
    return que(rs[now], mid + 1, r, ql, qr);
  else
    return max(que(ls[now], l, mid, ql, mid),
               que(rs[now], mid + 1, r, mid + 1, qr));
}
int main() {
  n = read();
  m = read();
  k = read();
  for (int i = 1; i <= k; i++) {
    a[i].l = read();
    a[i].r = read();
    a[i].v = read();
    LS[++lscnt] = a[i].l;
  }
  sort(LS + 1, LS + lscnt + 1);
  lscnt = unique(LS + 1, LS + lscnt + 1) - LS - 1;
  sort(a + 1, a + k + 1, cmp);
  build(T[lscnt + 1], 1, n);
  for (int i = k; i >= 1; i--) {
    a[i].l = lower_bound(LS + 1, LS + lscnt + 1, a[i].l) - LS;
    if (!T[a[i].l])
      insert(T[a[i].l], T[a[i].l + 1], 1, n, a[i].v, a[i].r);
    else
      insert(T[a[i].l], T[a[i].l], 1, n, a[i].v, a[i].r);
  }
  for (int a, b, x, y, i = 1; i <= m; i++) {
    a = read();
    b = read();
    x = read();
    y = read();
    x = lower_bound(LS + 1, LS + lscnt + 1, x) - LS;
    if (x > lscnt)
      printf("no\n");
    else if (que(T[x], 1, n, a, b) <= y)
      printf("yes\n");
    else
      printf("no\n");
    fflush(stdout);
  }
  return 0;
}
