#include <bits/stdc++.h>
clock_t t = clock();
namespace my_std {
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template <typename T>
inline T rnd(T l, T r) {
  return uniform_int_distribution<T>(l, r)(rng);
}
template <typename T>
inline bool chkmax(T &x, T y) {
  return x < y ? x = y, 1 : 0;
}
template <typename T>
inline bool chkmin(T &x, T y) {
  return x > y ? x = y, 1 : 0;
}
template <typename T>
inline void read(T &t) {
  t = 0;
  char f = 0, ch = getchar();
  double d = 0.1;
  while (ch > '9' || ch < '0') f |= (ch == '-'), ch = getchar();
  while (ch <= '9' && ch >= '0') t = t * 10 + ch - 48, ch = getchar();
  if (ch == '.') {
    ch = getchar();
    while (ch <= '9' && ch >= '0') t += d * (ch ^ 48), d *= 0.1, ch = getchar();
  }
  t = (f ? -t : t);
}
template <typename T, typename... Args>
inline void read(T &t, Args &...args) {
  read(t);
  read(args...);
}
char __sr[1 << 21], __z[20];
int __C = -1, __zz = 0;
inline void Ot() { fwrite(__sr, 1, __C + 1, stdout), __C = -1; }
inline void print(register int x) {
  if (__C > 1 << 20) Ot();
  if (x < 0) __sr[++__C] = '-', x = -x;
  while (__z[++__zz] = x % 10 + 48, x /= 10)
    ;
  while (__sr[++__C] = __z[__zz], --__zz)
    ;
  __sr[++__C] = '\n';
}
void file() {}
inline void chktime() {}
long long ksm(long long x, int y) {
  long long ret = 1;
  for (; y; y >>= 1, x = x * x)
    if (y & 1) ret = ret * x;
  return ret;
}
}  // namespace my_std
using namespace my_std;
int n, m, K;
struct hh {
  int l, r, id;
  const bool operator<(const hh &x) const { return l >= x.l; }
} a[301001];
int tr[301001 * 30];
int ls[301001 * 30], rs[301001 * 30], cnt;
int root[301001];
void pushup(int k) { tr[k] = max(tr[ls[k]], tr[rs[k]]); }
void modify(int &k, int l, int r, int x, int w, int pre) {
  k = ++cnt;
  tr[k] = tr[pre];
  ls[k] = ls[pre];
  rs[k] = rs[pre];
  if (l == r) return void(chkmin(tr[k], w));
  int mid = (l + r) >> 1;
  if (x <= mid)
    modify(ls[k], l, mid, x, w, ls[pre]);
  else
    modify(rs[k], mid + 1, r, x, w, rs[pre]);
  pushup(k);
}
int query(int k, int l, int r, int x, int y) {
  if (x <= l && r <= y) return tr[k];
  int mid = (l + r) >> 1, ret = 0;
  if (x <= mid) chkmax(ret, query(ls[k], l, mid, x, y));
  if (y > mid) chkmax(ret, query(rs[k], mid + 1, r, x, y));
  return ret;
}
int main() {
  file();
  read(n, m, K);
  int x, y, z, l, r;
  for (int i = (1); i <= (K); i++) read(x, y, z), a[i] = (hh){x, y, z};
  sort(a + 1, a + K + 1);
  tr[0] = 2e9;
  for (int i = (1); i <= (K); i++)
    modify(root[i], 1, n, a[i].id, a[i].r, root[i - 1]);
  while (m--) {
    read(l, r, x, y);
    int pos = lower_bound(a + 1, a + K + 1, (hh){x, 0, 0}) - a - 1;
    int p = query(root[pos], 1, n, l, r);
    printf(p <= y ? "yes\n" : "no\n");
    fflush(stdout);
  }
  return 0;
}
