#include <iostream>
#include <vector>
#include <queue>

using namespace std;

#define int long long
#define rep(i,n) for(int i=0;i<(int)n;++i)

const int inf = 3e18;

int d1[305][305];
int d2[305][305];
int N, M, L;

signed main()
{
	cin >> N >> M >> L;

	rep(i, N) rep(j, N) {
		d1[i][j] = inf;
		d2[i][j] = inf;
	}

	rep(i, N) d1[i][i] = d2[i][i] = 0;

	rep(_, M) {
		int a, b, c; cin >> a >> b >> c;
		--a, --b;
		d1[a][b] = d1[b][a] = c;
	}

	rep(k, N) rep(i, N) rep(j, N) {
		d1[i][j] = min(d1[i][j], d1[i][k] + d1[k][j]);
	}

	rep(i, N) rep(j, N) {
		if (i != j and d1[i][j] <= L) {
			d2[i][j] = 1;
		}
	}

	rep(k, N) rep(i, N) rep(j, N) {
		d2[i][j] = min(d2[i][j], d2[i][k] + d2[k][j]);
	}

	int q; cin >> q;

	rep(_, q) {
		int s, t; cin >> s >> t;
		--s, --t;
		cout << (d2[s][t] == inf ? -1 : d2[s][t] - 1) << endl;
	}
}
