#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> PII;
typedef long long L;

const int INF = 0x3FFFFFFF;

struct node
{
	int x, y, z;
	node(){}
	node(int x, int y, int z) : x(x), y(y), z(z){}
	bool operator < (const node &rhs) const{
		return z < rhs.z;
	}
};

vector<node> E;
vector<int> S[200];
int dp[200][200][200];
int N, M, Q;

void gao(int start)
{
	for (int i = 1; i <= N; i++) {
		for (int j = 0; j <= N; j++) {
			dp[start][i][j] = INF;
		}
	}
	dp[start][start][0] = 0;
	for (int i = 0; i < M; i++) {
		int u = E[i].x;
		int v = E[i].y;
		int w = E[i].z;
		for (int j = 1; j <= N; j++) {
			if (dp[start][u][j - 1] == INF) continue;
			dp[start][v][j] = min(dp[start][v][j], dp[start][u][j - 1] + w);
		}
	}
}

int main()
{
	ios::sync_with_stdio(false);
	int T;
	cin >> T;
	while (T--) {
		cin >> N >> M >> Q;
		E.clear();
		for (int i = 0; i < M; i++) {
			int x, y, z;
			cin >> x >> y >> z;
			E.push_back(node(x, y, z));
		}
		sort(E.begin(), E.end());
		for (int i = 1; i <= N; i++) {
			gao(i);
		}
		for (int i = 1; i <= Q; i++) {
			int a, b, c;
			cin >> a >> b >> c;
			int delta = INF;
			for (int j = 0; j <= min(N, c); j++) {
				delta = min(delta, dp[a][b][j]);
			}
			if (delta >= INF) delta = -1;
			cout << delta << '\n';
		}
	}
	return 0;
}
