#include <bits/stdc++.h>
using namespace std;
template <typename T>
void out(T x) {
  cout << x << endl;
  exit(0);
}
const long long mod = 1e9 + 7;
const int maxn = 1e6 + 5;
const int inf = 2e9;
struct node {
  int val;
  node *left;
  node *right;
  node() {
    val = inf;
    left = right = NULL;
  }
};
int n;
node *tree[maxn];
int qry(node *v, int tl, int tr, int l, int r) {
  if (l > tr || r < tl) {
    return 0;
  }
  if (v == NULL) {
    return inf;
  }
  if (l <= tl && tr <= r) {
    return v->val;
  }
  int tm = (tl + tr) / 2;
  return max(qry(v->left, tl, tm, l, r), qry(v->right, tm + 1, tr, l, r));
}
node *insert(node *v, int tl, int tr, int idx, int val) {
  node *ret = new node();
  if (!v) {
    v = ret;
  }
  ret->left = v->left;
  ret->right = v->right;
  ret->val = v->val;
  if (tl == tr) {
    ret->val = min(ret->val, val);
  } else {
    int tm = (tl + tr) / 2;
    if (idx <= tm) {
      ret->left = insert(v->left, tl, tm, idx, val);
    } else {
      ret->right = insert(v->right, tm + 1, tr, idx, val);
    }
    ret->val = max(ret->left ? ret->left->val : inf,
                   ret->right ? ret->right->val : inf);
  }
  return ret;
}
int m, k;
vector<int> intervals[maxn];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    int l, r, id;
    cin >> l >> r >> id;
    intervals[i] = {l, r, id};
  }
  sort(intervals, intervals + k);
  for (int i = 0; i <= k; i++) {
    tree[i] = NULL;
  }
  for (int i = k - 1; i >= 0; i--) {
    int id = intervals[i][2];
    int r = intervals[i][1];
    tree[i] = insert(tree[i + 1], 1, n, id, r);
  }
  while (m--) {
    int a, b, x, y;
    cin >> a >> b >> x >> y;
    int i = std::lower_bound(intervals, intervals + k, vector<int>{x, -1, -1}) -
            intervals;
    bool res = qry(tree[i], 1, n, a, b) <= y;
    if (res)
      cout << "yes\n";
    else
      cout << "no\n";
    cout.flush();
  }
  return 0;
}
