#include <bits/stdc++.h>
using namespace std;
struct segment {
  int l, r, s;
};
bool operator<(segment a, segment b) {
  return make_pair(a.r, a.l) < make_pair(b.r, b.l);
}
segment segments[300002];
int n, m, k;
struct arbInt {
  int sz, minval;
  arbInt* left;
  arbInt* right;
};
arbInt* buildZero(int n) {
  if (n == 1)
    return new arbInt{1, 0, NULL, NULL};
  else
    return new arbInt{n, 0, buildZero(n / 2), buildZero(n - n / 2)};
}
arbInt* update(arbInt* root, int index, int newval) {
  if (root->sz == 1)
    return new arbInt{1, max(root->minval, newval), NULL, NULL};
  else if (index <= root->left->sz) {
    arbInt* newson = update(root->left, index, newval);
    return new arbInt{root->sz, min(newson->minval, root->right->minval),
                      newson, root->right};
  } else {
    arbInt* newson = update(root->right, index - root->left->sz, newval);
    return new arbInt{root->sz, min(root->left->minval, newson->minval),
                      root->left, newson};
  }
}
int query(arbInt* root, int qleft, int qright) {
  if (qleft == 1 && qright == root->sz)
    return root->minval;
  else {
    if (qright <= root->left->sz)
      return query(root->left, qleft, qright);
    else if (root->left->sz < qleft)
      return query(root->right, qleft - root->left->sz,
                   qright - root->left->sz);
    else
      return min(query(root->left, qleft, root->left->sz),
                 query(root->right, 1, qright - root->left->sz));
  }
}
arbInt* versions[300002];
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= k; i++)
    cin >> segments[i].l >> segments[i].r >> segments[i].s;
  sort(segments + 1, segments + k + 1);
  versions[0] = buildZero(n);
  for (int i = 1; i <= k; i++)
    versions[i] = update(versions[i - 1], segments[i].s, segments[i].l);
  for (int i = 1; i <= m; i++) {
    int a, b, x, y;
    cin >> a >> b >> x >> y;
    int l = 1, r = k, mid;
    while (l < r) {
      mid = (l + r + 1) / 2;
      if (segments[mid].r > y)
        r = mid - 1;
      else
        l = mid;
    }
    int pos = l;
    if (segments[pos].r > y) {
      cout << "no\n";
      fflush(stdout);
      continue;
    }
    if (x <= query(versions[pos], a, b))
      cout << "yes\n";
    else
      cout << "no\n";
    fflush(stdout);
  }
  return 0;
}
