#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define l(a, b, i) for (ll i = a; i < b; i++)
#define rl(a, b, i) for (ll i = a; i >= b; i--)
#define vpair vector<pair<ll, ll>>
#define inf LLONG_MAX
#define ninf LLONG_MIN
ll N, M, P, A, B, C, Q, L, R, X;
struct Edge {
ll to, company;
};
vector<vector<Edge>> adjlist;
vector<bool> visited;
void dfs(ll cur, set<ll> &indi) {
for (const Edge &e : adjlist[cur]) {
if (!indi.count(e.company)) continue;
if (!visited[e.to]) {
visited[e.to] = true;
dfs(e.to, indi);
}
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> N >> M >> P;
adjlist.resize(N + 1);
set<ll> st; // cac companies ma so huu at least 1 line
l(1, M + 1, i) {
cin >> A >> B >> C;
adjlist[A].push_back({B, C});
st.insert(C);
}
cin >> Q;
l(1, Q + 1, i) {
cin >> L >> R >> X;
set<ll> indi;
auto it = st.lower_bound(L);
while (it != st.end() && *it <= R) {
indi.insert(*it);
it++;
}
visited.assign(N + 1, false);
visited[1] = true;
dfs(1, indi);
bool ok = true;
l(1, N + 1, i) if (visited[i] == false) ok = false;
if (ok) cout << "Yes\n";
else cout << "No\n";
}
}