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

int dis[160][160][160];
int fir[200],oth[3200],len[3200],nex[3200],tot;
int que[500000];
int n,m,q,T;

void add(int q,int w,int e){
	tot++; nex[tot] = fir[q];
	fir[q] = tot; oth[tot] = w; len[tot] = e;
}

void spfa(int q){
	int g[3200];
	memset(g,100,sizeof(g));
	dis[q][q][0] = 0;
	add(0,q,0);
	que[0] = tot; g[tot] = 0;
	
	int l=0,r=0,k;
	for (int w=1;w<=n;w++){
		k=r;
		for (int i=l;i<=r;i++){
			int e = que[i];
			for (int j=fir[oth[e]];j;j=nex[j]){
				if (len[j]>len[e]){
					int tmp = g[e] + len[j];
					if (tmp<g[j]){
						dis[q][oth[j]][w] = min(dis[q][oth[j]][w],tmp);
						g[j] = tmp;
						que[++k] = j;
					}
				}
			}
		}
		l = r+1; r=k;
	}
}

int main(){
	scanf("%d",&T);
	while (T--){
		scanf("%d %d %d",&n,&m,&q);
		memset(fir,0,sizeof(fir));
		tot = 0;
		for (;m--;){
			int i,j,k;
			scanf("%d %d %d",&i,&j,&k);
			add(i,j,k);
		}
		memset(dis,100,sizeof(dis));
		add(0,0,0);
		for (int i=1;i<=n;i++){
			spfa(i);
		}
		for (;q--;){
			int f,t,w;
			scanf("%d %d %d",&f,&t,&w);
			int sum = 2100000000;
			w = min(w,n);
			for (int i=0;i<=w;i++){
				sum = min(sum,dis[f][t][i]);
			}
			if (sum>10000000) sum = -1;
			printf("%d\n",sum);
		}
	}
	return 0;
}
