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 = (gets.split.map(&:to_i) + [a, h]).sort
	d0 = (1..n).map{ [Float::INFINITY] * n }
	k.times {
		x, y, t = gets.split.map &:to_i
		d0[x][y] = t
		d0[y][x] = t
	}
	
	d1 = warshall_floyd(d0)
	d2 = freezer.map{|x|
		freezer.map{|y|
			d1[x][y] <= m ? d1[x][y] : Float::INFINITY
		}
	}
	d3 = warshall_floyd(d2)
	
	d = d3[freezer.index(a)][freezer.index(h)]
	t = d + (d < m ? 0 : d - m)

	puts t == Float::INFINITY ? 'Help!' : t
}