n,m,l = map(int,input().split())
inf = 10 ** 18
d1 = [[inf for _ in range(n)] for _ in range(n)]
for i in range(n):
  d1[i][i] = 0
for _ in range(m):
  a,b,c = map(int,input().split())
  a -= 1
  b -= 1
  d1[a][b] = c
  d1[b][a] = c
for k in range(n):
  for i in range(n):
    for j in range(n):
      d1[i][j] = min(d1[i][j], d1[i][k]+d1[k][j])
d2 = [[inf for _ in range(n)] for _ in range(n)]
for i in range(n):
  for j in range(n):
    if d1[i][j] == 0:
      d2[i][j] = 0
    elif d1[i][j] <= l:
      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][j], d2[i][k]+d2[k][j])
q = int(input())
for _ in range(q):
  s,t = map(int,input().split())
  s -= 1
  t -= 1
  ans = d2[s][t]
  if ans >= inf:
    print(-1)
  else:
    print(ans-1) n,m,l = map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m l inf = 10 ** 18 inf 10 ** 18 10 18 [inf for _ in range(n)] for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) [inf for _ in range(n)] d1 = [[inf for _ in range(n)] for _ in range(n)] d1 [[inf for _ in range(n)] for _ in range(n)] 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 _ 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 k in range(n):
  for i in range(n):
    for j in range(n):
      d1[i][j] = min(d1[i][j], d1[i][k]+d1[k][j]) k range(n) range n for i in range(n):
    for j in range(n):
      d1[i][j] = min(d1[i][j], d1[i][k]+d1[k][j]) i range(n) range n for j in range(n):
      d1[i][j] = min(d1[i][j], d1[i][k]+d1[k][j]) j range(n) range n d1[i][j] = min(d1[i][j], d1[i][k]+d1[k][j]) d1[i][j] [i] d1 i j min(d1[i][j], d1[i][k]+d1[k][j]) min d1[i][j] [i] d1 i j d1[i][k]+d1[k][j] d1[i][k] [i] d1 i k d1[k][j] [k] d1 k j [inf for _ in range(n)] for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) [inf for _ in range(n)] d2 = [[inf for _ in range(n)] for _ in range(n)] d2 [[inf for _ in range(n)] for _ in range(n)] for i in range(n):
  for j in range(n):
    if d1[i][j] == 0:
      d2[i][j] = 0
    elif d1[i][j] <= l:
      d2[i][j] = 1 i range(n) range n for j in range(n):
    if d1[i][j] == 0:
      d2[i][j] = 0
    elif d1[i][j] <= l:
      d2[i][j] = 1 j range(n) range n if d1[i][j] == 0:
      d2[i][j] = 0
    elif d1[i][j] <= l:
      d2[i][j] = 1 d1[i][j] == 0 d1[i][j] [i] d1 i j 0 d2[i][j] = 0 d2[i][j] [i] d2 i j 0 elif d1[i][j] <= l:
      d2[i][j] = 1 d1[i][j] <= l d1[i][j] [i] d1 i j l 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][j], d2[i][k]+d2[k][j]) k range(n) range n for i in range(n):
    for j in range(n):
      d2[i][j] = min(d2[i][j], d2[i][k]+d2[k][j]) i range(n) range n for j in range(n):
      d2[i][j] = min(d2[i][j], d2[i][k]+d2[k][j]) j range(n) range n d2[i][j] = min(d2[i][j], d2[i][k]+d2[k][j]) d2[i][j] [i] d2 i j min(d2[i][j], d2[i][k]+d2[k][j]) min d2[i][j] [i] d2 i j d2[i][k]+d2[k][j] d2[i][k] [i] d2 i k d2[k][j] [k] d2 k j q = int(input()) q int(input()) int input() input for _ in range(q):
  s,t = map(int,input().split())
  s -= 1
  t -= 1
  ans = d2[s][t]
  if ans >= inf:
    print(-1)
  else:
    print(ans-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 ans = d2[s][t] ans d2[s][t] [s] d2 s t if ans >= inf:
    print(-1)
  else:
    print(ans-1) ans >= inf ans inf print(-1) print -1 print(ans-1) print ans-1 ans 1 s -= 1 1 s ans = d2[s][t] d2[s][t] ans d1 = [[inf for _ in range(n)] for _ in range(n)] [[inf for _ in range(n)] for _ in range(n)] d1 s,t = map(int,input().split()) map(int,input().split()) s b,c = map(int,input().split()) map(int,input().split()) b t -= 1 1 t m,l = map(int,input().split()) map(int,input().split()) m l = map(int,input().split()) map(int,input().split()) l b -= 1 1 b d2 = [[inf for _ in range(n)] for _ in range(n)] [[inf for _ in range(n)] for _ in range(n)] d2 inf = 10 ** 18 10 ** 18 inf a -= 1 1 a c = map(int,input().split()) map(int,input().split()) c n,m,l = map(int,input().split()) map(int,input().split()) n t = map(int,input().split()) map(int,input().split()) t a,b,c = map(int,input().split()) map(int,input().split()) a q = int(input()) int(input()) q
n,m,l = map(int,input().split())
inf = 10 ** 18
d1 = [[inf for _ in range(n)] for _ in range(n)]
for i in range(n):
  d1[i][i] = 0
for _ in range(m):
  a,b,c = map(int,input().split())
  a -= 1
  b -= 1
  d1[a][b] = c
  d1[b][a] = c
for k in range(n):
  for i in range(n):
    for j in range(n):
      d1[i][j] = min(d1[i][j], d1[i][k]+d1[k][j])
d2 = [[inf for _ in range(n)] for _ in range(n)]
for i in range(n):
  for j in range(n):
    if d1[i][j] == 0:
      d2[i][j] = 0
    elif d1[i][j] <= l:
      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][j], d2[i][k]+d2[k][j])
q = int(input())
for _ in range(q):
  s,t = map(int,input().split())
  s -= 1
  t -= 1
  ans = d2[s][t]
  if ans >= inf:
    print(-1)
  else:
    print(ans-1)