#include <bits/stdc++.h>
using namespace std;
const int N = 300000 + 10, M = 100000 + 10;
inline long long rd() {
  long long x = 0, w = 1;
  char ch = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 3) + (x << 1) + (ch ^ 48);
    ch = getchar();
  }
  return x * w;
}
int n, m, k;
struct node {
  int l, r, n;
  bool operator<(const node &bb) const { return l < bb.l; }
} p[N];
int s[N * 20], ch[N * 20][2], rt[N], tt;
int st[110], tp;
int quer(int o, int l, int r, int ll, int rr) {
  if (!o) return 1 << 30;
  if (ll <= l && r <= rr) return s[o];
  int mid = (l + r) >> 1, an = 0;
  if (ll <= mid) an = max(an, quer(ch[o][0], l, mid, ll, rr));
  if (rr > mid) an = max(an, quer(ch[o][1], mid + 1, r, ll, rr));
  return an;
}
inline void inst(int o1, int o2, int x, int y) {
  y = min(y, quer(o2, 1, n, x, x));
  int l = 1, r = n;
  while (l < r) {
    st[++tp] = o1;
    int mid = (l + r) >> 1;
    if (x <= mid) {
      ch[o1][0] = ++tt, ch[o1][1] = ch[o2][1];
      o1 = ch[o1][0], o2 = ch[o2][0];
      r = mid;
    } else {
      ch[o1][0] = ch[o2][0], ch[o1][1] = ++tt;
      o1 = ch[o1][1], o2 = ch[o2][1];
      l = mid + 1;
    }
  }
  s[o1] = y;
  while (tp) {
    o1 = st[tp--];
    s[o1] = max(s[ch[o1][0]], s[ch[o1][1]]);
  }
}
int main() {
  n = rd(), m = rd(), k = rd();
  for (int i = 1; i <= k; ++i) p[i].l = rd(), p[i].r = rd(), p[i].n = rd();
  sort(p + 1, p + k + 1);
  s[0] = 1 << 30;
  for (int i = k; i >= 1; --i) inst(rt[i] = ++tt, rt[i + 1], p[i].n, p[i].r);
  while (m--) {
    int a = rd(), b = rd(), x = rd(), y = rd();
    int l = 1, r = k, z = 0;
    while (l <= r) {
      int mid = (l + r) >> 1;
      if (p[mid].l >= x)
        z = mid, r = mid - 1;
      else
        l = mid + 1;
    }
    if (!z)
      puts("no");
    else
      puts(quer(rt[z], 1, n, a, b) <= y ? "yes" : "no");
    cout.flush();
  }
  return 0;
}
