N, M, L = map(int, input().split())

INF = float('inf')
d1 = [[INF]*N for _ in range(N)]


for _ in range(M):
    a, b, c = map(int, input().split())
    a -= 1
    b -= 1
    d1[a][b] = c
    d1[b][a] = c
for i in range(N):
    d1[i][i] = 0
for k in range(N):
    for i in range(N):
        for j in range(N):
            d1[i][j] = min(d1[i][k] + d1[k][j], d1[i][j])

d2 = [[INF]*N for _ in range(N)]

for i in range(N):
    for j in range(N):
        if i == j:
            d2[i][j] = 0
        if d1[i][j] <= L and i != j:
            d2[i][j] = 1
for k in range(N):
    for i in range(N):
        for j in range(N):
            d2[i][j] = min(d2[i][k] + d2[k][j], d2[i][j])
Q = int(input())
for _ in range(Q):
    s, t = map(int, input().split())
    s -= 1
    t -= 1
    if d2[s][t] == INF:
        print(-1)
    else:
        print(d2[s][t]-1) N, M, L = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split M L INF = float('inf') INF float('inf') float 'inf' [INF]*N for _ in range(N) for _ in range(N) _ range(N) range N for _ in range(N) [INF]*N [INF] INF N d1 = [[INF]*N for _ in range(N)] d1 [[INF]*N for _ in range(N)] for _ in range(M):
    a, b, c = map(int, input().split())
    a -= 1
    b -= 1
    d1[a][b] = c
    d1[b][a] = c _ range(M) range M a, b, c = map(int, input().split()) a map(int, input().split()) map int input().split() ().split () input split b c a -= 1 a 1 b -= 1 b 1 d1[a][b] = c d1[a][b] [a] d1 a b c d1[b][a] = c d1[b][a] [b] d1 b a c for i in range(N):
    d1[i][i] = 0 i range(N) range N d1[i][i] = 0 d1[i][i] [i] d1 i i 0 for k in range(N):
    for i in range(N):
        for j in range(N):
            d1[i][j] = min(d1[i][k] + d1[k][j], d1[i][j]) k range(N) range N for i in range(N):
        for j in range(N):
            d1[i][j] = min(d1[i][k] + d1[k][j], d1[i][j]) i range(N) range N for j in range(N):
            d1[i][j] = min(d1[i][k] + d1[k][j], d1[i][j]) j range(N) range N d1[i][j] = min(d1[i][k] + d1[k][j], d1[i][j]) d1[i][j] [i] d1 i j min(d1[i][k] + d1[k][j], d1[i][j]) min d1[i][k] + d1[k][j] d1[i][k] [i] d1 i k d1[k][j] [k] d1 k j d1[i][j] [i] d1 i j [INF]*N for _ in range(N) for _ in range(N) _ range(N) range N for _ in range(N) [INF]*N [INF] INF N d2 = [[INF]*N for _ in range(N)] d2 [[INF]*N for _ in range(N)] for i in range(N):
    for j in range(N):
        if i == j:
            d2[i][j] = 0
        if d1[i][j] <= L and i != j:
            d2[i][j] = 1 i range(N) range N for j in range(N):
        if i == j:
            d2[i][j] = 0
        if d1[i][j] <= L and i != j:
            d2[i][j] = 1 j range(N) range N if i == j:
            d2[i][j] = 0
         i == j i j d2[i][j] = 0 d2[i][j] [i] d2 i j 0 if d1[i][j] <= L and i != j:
            d2[i][j] = 1 d1[i][j] <= L and i != j d1[i][j] <= L d1[i][j] [i] d1 i j L i != j i j d2[i][j] = 1 d2[i][j] [i] d2 i j 1 for k in range(N):
    for i in range(N):
        for j in range(N):
            d2[i][j] = min(d2[i][k] + d2[k][j], d2[i][j]) k range(N) range N for i in range(N):
        for j in range(N):
            d2[i][j] = min(d2[i][k] + d2[k][j], d2[i][j]) i range(N) range N for j in range(N):
            d2[i][j] = min(d2[i][k] + d2[k][j], d2[i][j]) j range(N) range N d2[i][j] = min(d2[i][k] + d2[k][j], d2[i][j]) d2[i][j] [i] d2 i j min(d2[i][k] + d2[k][j], d2[i][j]) min d2[i][k] + d2[k][j] d2[i][k] [i] d2 i k d2[k][j] [k] d2 k j d2[i][j] [i] d2 i j Q = int(input()) Q int(input()) int input() input for _ in range(Q):
    s, t = map(int, input().split())
    s -= 1
    t -= 1
    if d2[s][t] == INF:
        print(-1)
    else:
        print(d2[s][t]-1) _ range(Q) range Q s, t = map(int, input().split()) s map(int, input().split()) map int input().split() ().split () input split t s -= 1 s 1 t -= 1 t 1 if d2[s][t] == INF:
        print(-1)
    else:
        print(d2[s][t]-1) d2[s][t] == INF d2[s][t] [s] d2 s t INF print(-1) print -1 print(d2[s][t]-1) print d2[s][t]-1 d2[s][t] [s] d2 s t 1 M, L = map(int, input().split()) map(int, input().split()) M b -= 1 1 b s -= 1 1 s N, M, L = map(int, input().split()) map(int, input().split()) N t -= 1 1 t a, b, c = map(int, input().split()) map(int, input().split()) a L = map(int, input().split()) map(int, input().split()) L s, t = map(int, input().split()) map(int, input().split()) s t = map(int, input().split()) map(int, input().split()) t Q = int(input()) int(input()) Q b, c = map(int, input().split()) map(int, input().split()) b c = map(int, input().split()) map(int, input().split()) c d1 = [[INF]*N for _ in range(N)] [[INF]*N for _ in range(N)] d1 d2 = [[INF]*N for _ in range(N)] [[INF]*N for _ in range(N)] d2 INF = float('inf') float('inf') INF a -= 1 1 a
N, M, L = map(int, input().split())

INF = float('inf')
d1 = [[INF]*N for _ in range(N)]


for _ in range(M):
    a, b, c = map(int, input().split())
    a -= 1
    b -= 1
    d1[a][b] = c
    d1[b][a] = c
for i in range(N):
    d1[i][i] = 0
for k in range(N):
    for i in range(N):
        for j in range(N):
            d1[i][j] = min(d1[i][k] + d1[k][j], d1[i][j])

d2 = [[INF]*N for _ in range(N)]

for i in range(N):
    for j in range(N):
        if i == j:
            d2[i][j] = 0
        if d1[i][j] <= L and i != j:
            d2[i][j] = 1
for k in range(N):
    for i in range(N):
        for j in range(N):
            d2[i][j] = min(d2[i][k] + d2[k][j], d2[i][j])
Q = int(input())
for _ in range(Q):
    s, t = map(int, input().split())
    s -= 1
    t -= 1
    if d2[s][t] == INF:
        print(-1)
    else:
        print(d2[s][t]-1)
