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

long long dis[310][310];
long long End[310][310];

int main(){
    int n,m,l;
	scanf("%d %d %d",&n,&m,&l);
	for(int i=1; i<=n; i++)
	    for(int j=1; j<=n; j++) dis[i][j]=inf,End[i][j]=inf;
	for(int i=1; i<=m; i++){
		int x,y,z;
		scanf("%d %d %d",&x,&y,&z);
		dis[x][y]=dis[y][x]=z;
	}
	for(int i=1; i<=n; i++)
	    for(int j=1; j<=n; j++){
	    	for(int k=1; k<=n; k++){
	    		dis[j][k]=min(dis[j][k],dis[j][i]+dis[i][k]);
			}
		}
	for(int i=1; i<=n; i++){
		for(int j=1; j<=n; j++) if(dis[i][j]<=l) End[i][j]=1;
	}
	for(int i=1; i<=n; i++)
	    for(int j=1; j<=n; j++)
	       for(int k=1; k<=n; k++){
	       	    End[j][k]=min(End[j][k],End[j][i]+End[i][k]);
		   }
	int q;
	scanf("%d",&q);
	while(q--){
		int x,y;
		scanf("%d %d",&x,&y);
		if(End[x][y]!=inf) printf("%ld\n",End[x][y]-1);
		else printf("-1\n");
	}
	return 0;
}