// https://oj.uz/problem/view/BOI24_drivers 30/04 - 2026
#include<bits/stdc++.h>
using namespace std;
class UF {
public:
vector<int> parent;
vector<int> size;
UF(int n) {
parent.resize(n);
size.resize(n, 1);
for (int i=0; i<n; i++) parent[i] = i;
}
int F(int x) {
if (parent[x] == x) return x;
return (F(parent[x]));
}
void U(int a, int b) {
a = F(a); b = F(b);
if (a == b) return;
if (size[a] < size[b]) {
int c = a;
a = b; b = c;
}
parent[b] = a;
size[a] += size[b];
}
bool S(int a, int b) {
if (F(a) == F(b)) return true;
return false;
}
};
int main() {
int N, M, U;
cin >> N >> M >> U;
UF uf(N);
vector<vector<int>> roads(M);
for (int i=0; i<M; i++) {
int x, y, t;
cin >> x >> y >> t;
roads[i] = {t, x-1, y-1};
} sort(roads.begin(), roads.end());
vector<vector<int>> queries(U);
for (int i=0; i<U; i++) {
int a, b, p;
cin >> a >> b >> p;
queries[i] = {p, a-1, b-1, i};
} sort(queries.begin(), queries.end());
vector<string> ans(U);
int curr = 0;
for (int u=0; u<U; u++) {
while (curr != M) {
if (roads[curr][0] > queries[u][0]) break;
uf.U(roads[curr][1], roads[curr][2]);
curr++;
}
if (uf.S(queries[u][1], queries[u][2])) ans[queries[u][3]] = "TAIP";
else ans[queries[u][3]] = "NE";
}
for (int i=0; i<U; i++) cout << ans[i] << "\n";
return 0;
}