#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
const int INF = 1e9 + 10;
vector<pair<int, int> > vec[MAXN];
map<int, int> st[MAXN << 2];
void fix(map<int, int> &mp) {
  if (mp.empty()) return;
  int prv = INF;
  for (auto it = --mp.end();; --it) {
    it->second = min(it->second, prv);
    prv = it->second;
    if (it == mp.begin()) break;
  }
}
void plant(int v, int b, int e) {
  if (e - b == 1) {
    for (auto [l, r] : vec[b]) {
      if (!st[v].count(l)) st[v][l] = r;
      st[v][l] = min(st[v][l], r);
    }
    fix(st[v]);
    return;
  }
  int m = (b + e) >> 1;
  plant(v << 1, b, m);
  plant(v << 1 ^ 1, m, e);
  for (int u : {v << 1, v << 1 ^ 1}) {
    int w = u ^ 1;
    for (auto [key, val] : st[u]) {
      if (!st[v].count(key)) st[v][key] = val;
      st[v][key] = max(st[v][key], val);
      auto it = st[w].lower_bound(key);
      if (it == st[w].end())
        st[v][key] = INF;
      else
        st[v][key] = max(st[v][key], it->second);
    }
  }
}
bool smoke(int v, int b, int e, int l, int r, int x, int y) {
  if (l >= r) return 1;
  if (l == b && e == r) {
    auto it = st[v].lower_bound(x);
    if (it == st[v].end()) return 0;
    return it->second <= y;
  }
  int m = (b + e) >> 1;
  return smoke(v << 1, b, m, l, min(r, m), x, y) &&
         smoke(v << 1 ^ 1, m, e, max(m, l), r, x, y);
}
void solve() {
  int n, m, k;
  cin >> n >> m >> k;
  while (k--) {
    int l, r, id;
    cin >> l >> r >> id;
    --id;
    vec[id].emplace_back(l, r);
  }
  plant(1, 0, n);
  while (m--) {
    int l, r, x, y;
    cin >> l >> r >> x >> y;
    --l;
    if (smoke(1, 0, n, l, r, x, y)) {
      cout << "yes" << endl;
    } else {
      cout << "no" << endl;
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int te = 1;
  for (int w = 1; w <= te; w++) {
    solve();
  }
  return 0;
}
