def wf(d)
	n = d.size
	n.times{|k|
		dk = d[k]
		n.times{|i|
			di = d[i]
			n.times{|j|
				s = di[k] + dk[j]
				di[j] = s if di[j] > s
			}
		}
	}
end

n, m, l = gets.split.map(&:to_i)
INF = 1000000010
d = Array.new(n){Array.new(n, INF)}
m.times{
	a, b, c = gets.split.map(&:to_i)
	d[a - 1][b - 1] = d[b - 1][a - 1] = c
}
wf(d)
e = Array.new(n){Array.new(n, INF)}
n.times{|i|
	n.times{|j|
		e[i][j] = 1 if d[i][j] <= l
	}
}
wf(e)
q = gets.to_i
q.times{
	s, t = gets.split.map{|x|x.to_i - 1}
	puts (e[s][t] >= INF ? -1 : e[s][t] - 1)
}
