#include <bits/stdc++.h>
using namespace std;
const int NR = 1e5 + 10;
const int K = 3e5 + 10;
const int INF = 0x7f7f7f7f;
int n, m, k;
struct Seg {
  int l, r, num;
} seg[K];
inline bool cmp(Seg x, Seg y) { return x.l > y.l; }
int srt[K];
inline bool cmp1(int x, int y) { return x > y; }
int Rt[K], tot;
struct Tree {
  int ls, rs, val;
} t[NR << 6];
void Build(int& now, int l, int r) {
  t[now = ++tot].val = INF;
  if (l == r) return;
  Build(t[now].ls, l, ((l + r) >> 1));
  Build(t[now].rs, ((l + r) >> 1) + 1, r);
}
void Insert(int pre, int& now, int l, int r, int pos, int S) {
  t[now = ++tot] = t[pre];
  if (l == r) return (void)(t[now].val = min(t[now].val, S));
  if (((l + r) >> 1) >= pos)
    Insert(t[pre].ls, t[now].ls, l, ((l + r) >> 1), pos, S);
  else
    Insert(t[pre].rs, t[now].rs, ((l + r) >> 1) + 1, r, pos, S);
  t[now].val = max(t[t[now].ls].val, t[t[now].rs].val);
}
int Ask(int now, int l, int r, int x, int y) {
  if (!now) return INF;
  if (l >= x && r <= y) return t[now].val;
  int Ans = 0;
  if (((l + r) >> 1) >= x)
    Ans = max(Ans, Ask(t[now].ls, l, ((l + r) >> 1), x, y));
  if (((l + r) >> 1) < y)
    Ans = max(Ans, Ask(t[now].rs, ((l + r) >> 1) + 1, r, x, y));
  return Ans;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= k; i++)
    cin >> seg[i].l >> seg[i].r >> seg[i].num, srt[i] = seg[i].l;
  sort(seg + 1, seg + k + 1, cmp);
  sort(srt + 1, srt + k + 1, cmp1);
  Build(Rt[0], 1, n);
  for (int i = 1; i <= k; i++)
    Insert(Rt[i - 1], Rt[i], 1, n, seg[i].num, seg[i].r);
  while (m--) {
    int a, b, x, y;
    scanf("%d%d%d%d", &a, &b, &x, &y);
    int l = 1, r = k, ans = 0;
    while (l <= r) {
      if (srt[((l + r) >> 1)] >= x)
        ans = ((l + r) >> 1), l = ((l + r) >> 1) + 1;
      else
        r = ((l + r) >> 1) - 1;
    }
    int M = Ask(Rt[ans], 1, n, a, b);
    if (M <= y)
      puts("yes");
    else
      puts("no");
    fflush(stdout);
  }
}
