#include using namespace std; using ll = long long; #ifdef LOCAL #include #else #define debug(...) #endif int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(20); int N, M, Q; cin >> N >> M >> Q; assert(N <= 1000 && M <= 1000 && Q <= 5000); vector A(N), W; for (int i = 0; i < N; i++) cin >> A[i]; vector>> G(N); for (int i = 0; i < M; i++) { int u, v, w; cin >> u >> v >> w, u--, v--; W.emplace_back(w); G[u].emplace_back(v, w); G[v].emplace_back(u, w); } ranges::sort(W); W.erase(ranges::unique(W).begin(), W.end()); auto solve = [&](int s, int c) -> int { if (c == 1) return 0; // 店 s 到達で ok int ok = ssize(W), ng = -1; while (ok - ng > 1) { int mid = midpoint(ok, ng); vector seen(N); set K; queue que; seen[s] = true; K.emplace(A[s]); que.emplace(s); while (!que.empty()) { int v = que.front(); que.pop(); for (auto [u, w] : G[v]) { if (seen[u] || W[mid] < w) continue; seen[u] = true; K.emplace(A[u]); que.emplace(u); } } (ssize(K) >= c ? ok : ng) = mid; } return (ok == ssize(W) ? -1 : W[ok]); }; while (Q--) { int s, c; cin >> s >> c, s--; cout << solve(s, c) << "\n"; } }