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

int dis[310][310];
int 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]=10000000,end[i][j]=10000000;
	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]!=10000000) printf("%d\n",end[x][y]-1);
		else printf("-1\n");
	}
	return 0;
}