INF = 10 ** 14
N, M, L = map(int,input().split())

MAP1 = [[INF for i in range(N)] for j in range(N)]

for _ in range(M):
    A, B, C = map(int,input().split())
    MAP1[A-1][B-1] = C
    MAP1[B-1][A-1] = C

for k in range(N):
    for i in range(N):
        for j in range(N):
            MAP1[i][j] = min(MAP1[i][j], MAP1[i][k] + MAP1[k][j])

MAP2 = [[INF for i in range(N)] for j in range(N)]

for i in range(N):
    for j in range(N):
        if MAP1[i][j] <= L:
            MAP2[i][j] = 1

for k in range(N):
    for i in range(N):
        for j in range(N):
            MAP2[i][j] = min(MAP2[i][j], MAP2[i][k] + MAP2[k][j])

Q = int(input())

for _ in range(Q):
    s, t = map(int,input().split())
    if MAP2[s-1][t-1] == INF:
        print(-1)
    else:
        print(MAP2[s-1][t-1] - 1) INF = 10 ** 14 INF 10 ** 14 10 14 N, M, L = map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split M L [INF for i in range(N)] for j in range(N) for j in range(N) j range(N) range N for j in range(N) [INF for i in range(N)] MAP1 = [[INF for i in range(N)] for j in range(N)] MAP1 [[INF for i in range(N)] for j in range(N)] for _ in range(M):
    A, B, C = map(int,input().split())
    MAP1[A-1][B-1] = C
    MAP1[B-1][A-1] = 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 MAP1[A-1][B-1] = C MAP1[A-1][B-1] [A-1] MAP1 A-1 A 1 B-1 B 1 C MAP1[B-1][A-1] = C MAP1[B-1][A-1] [B-1] MAP1 B-1 B 1 A-1 A 1 C for k in range(N):
    for i in range(N):
        for j in range(N):
            MAP1[i][j] = min(MAP1[i][j], MAP1[i][k] + MAP1[k][j]) k range(N) range N for i in range(N):
        for j in range(N):
            MAP1[i][j] = min(MAP1[i][j], MAP1[i][k] + MAP1[k][j]) i range(N) range N for j in range(N):
            MAP1[i][j] = min(MAP1[i][j], MAP1[i][k] + MAP1[k][j]) j range(N) range N MAP1[i][j] = min(MAP1[i][j], MAP1[i][k] + MAP1[k][j]) MAP1[i][j] [i] MAP1 i j min(MAP1[i][j], MAP1[i][k] + MAP1[k][j]) min MAP1[i][j] [i] MAP1 i j MAP1[i][k] + MAP1[k][j] MAP1[i][k] [i] MAP1 i k MAP1[k][j] [k] MAP1 k j [INF for i in range(N)] for j in range(N) for j in range(N) j range(N) range N for j in range(N) [INF for i in range(N)] MAP2 = [[INF for i in range(N)] for j in range(N)] MAP2 [[INF for i in range(N)] for j in range(N)] for i in range(N):
    for j in range(N):
        if MAP1[i][j] <= L:
            MAP2[i][j] = 1 i range(N) range N for j in range(N):
        if MAP1[i][j] <= L:
            MAP2[i][j] = 1 j range(N) range N if MAP1[i][j] <= L:
            MAP2[i][j] = 1 MAP1[i][j] <= L MAP1[i][j] [i] MAP1 i j L MAP2[i][j] = 1 MAP2[i][j] [i] MAP2 i j 1 for k in range(N):
    for i in range(N):
        for j in range(N):
            MAP2[i][j] = min(MAP2[i][j], MAP2[i][k] + MAP2[k][j]) k range(N) range N for i in range(N):
        for j in range(N):
            MAP2[i][j] = min(MAP2[i][j], MAP2[i][k] + MAP2[k][j]) i range(N) range N for j in range(N):
            MAP2[i][j] = min(MAP2[i][j], MAP2[i][k] + MAP2[k][j]) j range(N) range N MAP2[i][j] = min(MAP2[i][j], MAP2[i][k] + MAP2[k][j]) MAP2[i][j] [i] MAP2 i j min(MAP2[i][j], MAP2[i][k] + MAP2[k][j]) min MAP2[i][j] [i] MAP2 i j MAP2[i][k] + MAP2[k][j] MAP2[i][k] [i] MAP2 i k MAP2[k][j] [k] MAP2 k j Q = int(input()) Q int(input()) int input() input for _ in range(Q):
    s, t = map(int,input().split())
    if MAP2[s-1][t-1] == INF:
        print(-1)
    else:
        print(MAP2[s-1][t-1] - 1) _ range(Q) range Q s, t = map(int,input().split()) s map(int,input().split()) map int input().split() ().split () input split t if MAP2[s-1][t-1] == INF:
        print(-1)
    else:
        print(MAP2[s-1][t-1] - 1) MAP2[s-1][t-1] == INF MAP2[s-1][t-1] [s-1] MAP2 s-1 s 1 t-1 t 1 INF print(-1) print -1 print(MAP2[s-1][t-1] - 1) print MAP2[s-1][t-1] - 1 MAP2[s-1][t-1] [s-1] MAP2 s-1 s 1 t-1 t 1 1 s, t = map(int,input().split()) map(int,input().split()) s t = map(int,input().split()) map(int,input().split()) t A, B, C = map(int,input().split()) map(int,input().split()) A B, C = map(int,input().split()) map(int,input().split()) B Q = int(input()) int(input()) Q L = map(int,input().split()) map(int,input().split()) L M, L = map(int,input().split()) map(int,input().split()) M INF = 10 ** 14 10 ** 14 INF MAP1 = [[INF for i in range(N)] for j in range(N)] [[INF for i in range(N)] for j in range(N)] MAP1 MAP2 = [[INF for i in range(N)] for j in range(N)] [[INF for i in range(N)] for j in range(N)] MAP2 C = map(int,input().split()) map(int,input().split()) C N, M, L = map(int,input().split()) map(int,input().split()) N
INF = 10 ** 14
N, M, L = map(int,input().split())

MAP1 = [[INF for i in range(N)] for j in range(N)]

for _ in range(M):
    A, B, C = map(int,input().split())
    MAP1[A-1][B-1] = C
    MAP1[B-1][A-1] = C

for k in range(N):
    for i in range(N):
        for j in range(N):
            MAP1[i][j] = min(MAP1[i][j], MAP1[i][k] + MAP1[k][j])

MAP2 = [[INF for i in range(N)] for j in range(N)]

for i in range(N):
    for j in range(N):
        if MAP1[i][j] <= L:
            MAP2[i][j] = 1

for k in range(N):
    for i in range(N):
        for j in range(N):
            MAP2[i][j] = min(MAP2[i][j], MAP2[i][k] + MAP2[k][j])

Q = int(input())

for _ in range(Q):
    s, t = map(int,input().split())
    if MAP2[s-1][t-1] == INF:
        print(-1)
    else:
        print(MAP2[s-1][t-1] - 1)