def warshall_floyd(dist_matrix)
	dist = dist_matrix
	n = dist.size
	raise "dist_matrix is not square" if dist.any?{|row| row.size != n}

	(0..n-1).each{|k|
		next_dist = (1..n).map{ Array.new(n) }	
		(0..n-1).each{|i|
			(0..n-1).each{|j|
				x = dist[i][j]
				y = dist[i][k] + dist[k][j]
				next_dist[i][j] = (x < y ? x : y)
			}
		}
		dist = next_dist
	}
	dist
end

loop {
	n, m, l, k, a, h = gets.split.map &:to_i
	break if n == 0

	freezer = [a, h]
	freezer += gets.split.map &:to_i
	dist_mat = (1..n).map { [Float::INFINITY] * n }
	
	k.times {
		x, y, t = gets.split.map &:to_i
		dist_mat[x][y] = t
		dist_mat[y][x] = t
	}

	dist_mat = warshall_floyd(dist_mat)

	bellman_ford = Hash.new(Float::INFINITY)
	bellman_ford[a] = 0

	edges = []
	freezer.combination(2){|i, j|
		d = dist_mat[i][j]
		if d <= m
			edges << [i, j, d]
			edges << [j, i, d]
		end
	}

	n.times {
		edges.each{|x, y, d|
			dist = bellman_ford[x] + d
			bellman_ford[y] = dist if dist < bellman_ford[y]
		}
	}

	ans = 2 * bellman_ford[h] - m
	puts ans == Float::INFINITY ? 'Help!' : ans
}