#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

const int N = 300;
const int INF = 1e9 + 7;

ll dist[N + 5][N + 5];
int cost[N + 5][N + 5];

int main(){
	for(int i=0; i<N+3; i++){
		for(int j=0; j<N+3; j++) dist[i][j] = cost[i][j] = INF;
	}
	int n,m,l;
	scanf("%d %d %d",&n,&m,&l);
	for(int i=0; i<m; i++){
		int u,v,w;
		scanf("%d %d %d",&u,&v,&w);
		dist[u][v] = dist[v][u] = w;
	}
	for(int k=1; k<=n; k++){
		for(int i=1; i<=n; i++){
			for(int j=1; j<=n; j++){
				dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
			}
		}
	}
	for(int i=1; i<=n; i++){
		for(int j=i; j<=n; j++){
			if(dist[i][j] <= l) cost[i][j] = cost[j][i] = 1;
		}
	}
	for(int k=1; k<=n; k++){
		for(int i=1; i<=n; i++){
			for(int j=1; j<=n; j++){
				cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]);
			}
		}
	}
	int q;
	scanf("%d",&q);
	while(q--){
		int u,v;
		scanf("%d %d",&u,&v);
		int ans = cost[u][v];
		if(ans == INF) ans = 0;
		printf("%d\n",ans-1);
	}
	return 0;
}