#include <stdio.h>
#include <string.h>
#include <iostream>
#include <queue>
#include <utility>
#include <vector>
#define INF 0x7FFFFFFF

using namespace std;

typedef pair<int,int> P;
typedef pair<int,P> PP;

int main(void){
	int n, m, l, k, a, h, inp, r[100], t[100][101], d[100][100], ans, i, j, x, y, z;
	priority_queue<PP,vector<PP>,greater<PP> > que; // 時間 残り時間 町の番号
	while(1){
		scanf("%d%d%d%d%d%d",&n,&m,&l,&k,&a,&h);
		if(n + m + l + k + a + h == 0)
			break; 
		memset(r,0,sizeof(r)); 
		for(i = 0;i < l;i++){  
			scanf("%d",&inp);  
			r[inp] = 1; 
		}
		memset(d,-1,sizeof(d));
		for(i = 0;i < k;i++){
			scanf("%d%d%d",&x,&y,&z);
			d[x][y] = z;
			d[y][x] = z;
		}
		memset(t,-1,sizeof(t));
		t[a][m] = 0;
		que.push(PP(0,P(m,a)));
		while(que.size()){
			x = que.top().first, y = que.top().second.first,z = que.top().second.second;
//			printf("t[%d][%d] = %d\n",z,y,t[z][y]);
			que.pop();
			if(r[z]){
				for(i = y + 1;i <= m;i++){
					if(t[z][i] == -1 || t[z][i] > x + i - y){
						t[z][i] = x + i - y;
						que.push(PP(x + i - y,P(i,z)));
					}
				}
			}
			for(i = 0;i < n;i++){
				if(d[z][i] != -1 && d[z][i] <= y && (t[i][y - d[z][i]] == -1 || t[i][y - d[z][i]] > x + d[z][i])){
					t[i][y - d[z][i]] = x + d[z][i];
					que.push(PP(x + d[z][i],P(y - d[z][i],i)));
				}
			}
		}
		ans = -1;
		for(i = 0;i <= m;i++){
			if(t[h][i] != -1 && (ans == -1 || t[h][i] < ans)) ans = t[h][i];
		}
		if(ans != -1)
			printf("%d\n",ans);
		else
			printf("Help!\n");

	}
	return 0;
}