#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
const int maxn=400;
int n,m;
ll mp[maxn][maxn],l;
void init(){
	memset(mp,inf,sizeof(mp));
	for(int i=1;i<=n;i++){
		mp[i][i]=0;
	}
}
int main(){
	scanf("%d%d%lld",&n,&m,&l);
	int a,b,c;
	init();
	for(int i=0;i<m;i++){
		scanf("%d%d%d",&a,&b,&c);
		if(mp[a][b]>c)mp[a][b]=c,mp[b][a]=c;
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(mp[i][j]>mp[i][k]+mp[k][j])
					mp[i][j]=mp[i][k]+mp[k][j];
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(mp[i][j]>l)mp[i][j]=inf;
			else mp[i][j]=1;
		}
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(mp[i][j]>mp[i][k]+mp[k][j])
					mp[i][j]=mp[i][k]+mp[k][j];
			}
		}
	}
	int q;
	scanf("%d",&q);
	while(q--){
		int s,t;
		scanf("%d%d",&s,&t);
		if(mp[s][t]==inf)puts("-1");
		else printf("%lld\n",mp[s][t]-1);
	}
	return 0;
}