
fun main(args:Array<String>):Unit {
    while(true){
        val arg = readLine()!!.split(' ').map(String::toInt)
        if (arg.all{it == 0}) return
        val (n, m, l) = arg.take(3)
        val (k, a, h) = arg.takeLast(3)
        val minRouteWholeCity = Array(n){Array(n){Int.MAX_VALUE}}
        val cityWithFreezer = ((if (l != 0) readLine()!!.split(' ').map(String::toInt) else {readLine(); listOf()}) + a + h).sorted()
        val home = cityWithFreezer.indexOfFirst { it == a }
        val hospital = cityWithFreezer.indexOfFirst { it == h }
        repeat(k){
            val (x, y, t) = readLine()!!.split(' ').map(String::toInt)
            minRouteWholeCity[x][y] = t
            minRouteWholeCity[y][x] = t
        }
        for (mid in 0 until n) for (from in 0 until n) for (to in 0 until n){
            if (minRouteWholeCity[from][to] - minRouteWholeCity[from][mid] > minRouteWholeCity[mid][to]){
                minRouteWholeCity[from][to] = minRouteWholeCity[from][mid] + minRouteWholeCity[mid][to]
                minRouteWholeCity[to][from] = minRouteWholeCity[from][to]
            }
        }
        val minWithFreezer = cityWithFreezer.map{ from ->
            cityWithFreezer.map{to ->
                if (minRouteWholeCity[from][to] > m)
                    Int.MAX_VALUE
                else
                    minRouteWholeCity[from][to]
            }.toTypedArray()}.toTypedArray()
        for (mid in 0 until minWithFreezer.size) for (from in 0 until minWithFreezer.size) for (to in 0 until minWithFreezer.size){
            if (minWithFreezer[from][to] - minWithFreezer[from][mid] > minWithFreezer[mid][to]){
                minWithFreezer[from][to] = minWithFreezer[from][mid] + minWithFreezer[mid][to]
                minWithFreezer[to][from] = minWithFreezer[from][to]
            }
        }
        println(if (minWithFreezer[home][hospital] == Int.MAX_VALUE) "Help!" else if (minWithFreezer[home][hospital] > m) (2 * minWithFreezer[home][hospital] - m) else minWithFreezer[home][hospital])
    }
}
