#include <bits/stdc++.h>
using namespace std;
struct st {
  int l, r, id;
  st(int l, int r, int id) : l(l), r(r), id(id) {}
};
struct tree {
  long long sum;
  tree *l, *r;
  tree() : sum(1e18), l(nullptr), r(nullptr) {}
  tree(long long x) : sum(x), l(nullptr), r(nullptr) {}
  tree(tree *l, tree *r) : sum(max(l->sum, r->sum)), l(l), r(r) {}
};
tree *build(int vl, int vr) {
  if (vl == vr) {
    return new tree(1e18);
  }
  int m = (vl + vr) >> 1;
  return new tree(build(vl, m), build(m + 1, vr));
}
long long get_mn(tree *v, int vl, int vr, int l, int r) {
  if (l > r)
    return -1e18;
  else if (vl == l && vr == r)
    return v->sum;
  int m = (vl + vr) >> 1;
  return max(get_mn(v->l, vl, m, l, min(r, m)),
             get_mn(v->r, m + 1, vr, max(l, m + 1), r));
}
tree *upd(tree *v, int vl, int vr, int pos, long long x) {
  if (vl == vr) {
    return new tree(min(x, v->sum));
  }
  int m = (vl + vr) >> 1;
  if (pos <= m) {
    return new tree(upd(v->l, vl, m, pos, x), v->r);
  } else {
    return new tree(v->l, upd(v->r, m + 1, vr, pos, x));
  }
}
bool operator<(const st &a, const st &b) { return (a.l < b.l); }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m, k;
  cin >> n >> m >> k;
  vector<st> v(k, st(0, 0, 0));
  for (auto &i : v) {
    cin >> i.l >> i.r >> i.id;
  }
  sort((v).begin(), (v).end());
  vector<tree *> pdo{build(0, n - 1)};
  for (int i = k - 1; i >= 0; --i) {
    pdo.push_back(upd(pdo.back(), 0, n - 1, v[i].id - 1, v[i].r));
  }
  while (m--) {
    int a, b, x, y;
    cin >> a >> b >> x >> y;
    --a;
    --b;
    int ans = lower_bound((v).begin(), (v).end(), st(x, 0, 0)) - v.begin();
    if (ans == v.size()) {
      cout << "no" << endl;
      fflush(stdout);
    } else {
      if (get_mn(pdo[k - ans], 0, n - 1, a, b) > y) {
        cout << "no" << endl;
        fflush(stdout);
      } else {
        cout << "yes" << endl;
        fflush(stdout);
      }
    }
  }
}
