#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll nx = 1e5 + 5;
ll dsu[nx];
vector<tuple<ll, ll, ll>> edges;
struct Queries {
ll t; int a, b, idx; bool res;
};
vector<Queries> queries;
int find(int x) {
if(dsu[x] == x) return x;
return dsu[x] = find(dsu[x]);
}
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr);
int n, m, q; cin >> n >> m >> q;
for(int i = 1; i <= n; i++) dsu[i] = i;
for(int i = 1; i <= m; i++) {
int u, v; ll w; cin >> u >> v >> w;
edges.push_back({w, u, v});
}
sort(edges.begin(), edges.end());
for(int i = 1; i <= q; i++) {
int u, v; ll w; cin >> u >> v >> w;
queries.push_back({w, u, v, i, 0});
}
sort(queries.begin(), queries.end(), [](auto &a, auto &b) {
return a.t < b.t;
});
int idx = 0;
for(int i = 0; i < q; i++) {
auto [t, a, b, _, _2] = queries[i];
while(idx < m && get<0>(edges[idx]) <= t) {
auto [w, u, v] = edges[idx];
int fu = find(u), fv = find(v);
if(fu != fv) dsu[fu] = fv;
idx++;
}
queries[i].res = find(a) == find(b) ? 1 : 0;
}
sort(queries.begin(), queries.end(), [](auto &a, auto &b) {
return a.idx < b.idx;
});
for(auto &e : queries) {
if(e.res) cout << "TAIP";
else cout << "NE";
cout << endl;
}
return 0;
}