#include <bits/stdc++.h>
const long long md = 998244353;
const int Inf = 1e9;
const long long Inf64 = 1e18;
const long long MaxN = 260;
const long long LogN = 20;
const long long MaxM = 1e10;
const long double eps = 1e-7;
const long long dx[4] = {0, 1, 0, -1};
const long long dy[4] = {1, 0, -1, 0};
const long long ddx[4] = {1, 1, -1, -1};
const long long ddy[4] = {1, -1, 1, -1};
const long double Pi = acos(-1);
using namespace std;
inline long long Mod(long long &a, long long m = md) {
  while (a > m) a -= m;
  return a;
}
inline long long gcd(long long a, long long b) {
  while (a) {
    b %= a;
    swap(a, b);
  }
  return b;
}
inline long long gcdex(long long a, long long mod = md) {
  long long g = mod, r = a, x = 0, y = 1;
  while (r != 0) {
    long long q = g / r;
    g %= r;
    swap(g, r);
    x -= q * y;
    swap(x, y);
  }
  return x < 0 ? x + mod : x;
}
inline long long binpow(long long a, long long n, long long m = md) {
  long long res = 1;
  while (n) {
    if (n & 1) {
      res *= a;
      res %= m;
    }
    a *= a;
    a %= m;
    n >>= 1;
  }
  return res % md;
}
struct el {
  long long l, r, p;
};
struct Vert {
  Vert(long long mn = Inf) {
    l = NULL;
    r = NULL;
    Mn = mn;
  }
  Vert(Vert *tl, Vert *tr) {
    l = tl;
    r = tr;
    Mn = max(l->Mn, r->Mn);
  }
  Vert *l, *r;
  long long Mn;
};
Vert *Build(long long l, long long r) {
  if (l == r) {
    return new Vert();
  }
  long long mid = (l + r) / 2;
  return new Vert(Build(l, mid), Build(mid + 1, r));
}
Vert *Add(long long l, long long r, long long x, long long a, Vert *t) {
  if (l == r) {
    return new Vert(min(a, t->Mn));
  } else {
    long long mid = (l + r) / 2;
    if (x <= mid) return new Vert(Add(l, mid, x, a, t->l), t->r);
    if (x >= mid + 1) return new Vert(t->l, Add(mid + 1, r, x, a, t->r));
  }
}
long long GetMin(long long l, long long r, long long x, long long y, Vert *t) {
  if (l == x && r == y) {
    return t->Mn;
  } else {
    long long mid = (l + r) / 2;
    if (y <= mid) {
      return GetMin(l, mid, x, y, t->l);
    } else if (x >= mid + 1) {
      return GetMin(mid + 1, r, x, y, t->r);
    } else {
      return max(GetMin(l, mid, x, mid, t->l),
                 GetMin(mid + 1, r, mid + 1, y, t->r));
    }
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long N, Q, M;
  cin >> N >> Q >> M;
  vector<el> Mt(M);
  for (int i = 0; i < M; i++) {
    cin >> Mt[i].l >> Mt[i].r >> Mt[i].p;
  }
  sort(Mt.begin(), Mt.end(), [=](el a, el b) { return a.l < b.l; });
  vector<Vert *> Roots;
  Roots.push_back(new Vert());
  Roots[0] = Build(1, N);
  for (int i = M - 1; i > -1; i--) {
    Roots.push_back(Add(1, N, Mt[i].p, Mt[i].r, Roots.back()));
  }
  while (Q--) {
    long long a, b, x, y;
    cin >> a >> b >> x >> y;
    long long l = -1;
    long long r = Mt.size();
    while (r - l > 1) {
      long long mid = (l + r) / 2;
      if (Mt[mid].l < x)
        l = mid;
      else
        r = mid;
    }
    if (r < 0 || r >= Mt.size() || Mt[r].l < x) {
      cout << "no" << endl;
      continue;
    }
    long long id = M - r;
    long long w = GetMin(1, N, a, b, Roots[id]);
    if (w > y) {
      cout << "no" << endl;
      continue;
    }
    cout << "yes" << endl;
    continue;
  }
  cerr << '\n'
       << "Time execute: " << clock() / (double)CLOCKS_PER_SEC << " sec"
       << '\n';
  return 0;
}
