#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
int bfs[100][101];
int g[100][101];
int v[100];
int V[100][101];
int main(){
	int a,b,c,d,e,f;
	while(scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f),a){
		for(int i=0;i<100;i++)
			for(int j=0;j<101;j++)
				bfs[i][j]=99999999;
		for(int i=0;i<100;i++)v[i]=0;
		for(int i=0;i<c;i++){
			int p;
			scanf("%d",&p);
			v[p]=1;
		}
		for(int i=0;i<100;i++)
			for(int j=0;j<101;j++){
				g[i][j]=-1;V[i][j]=0;
			}
		for(int i=0;i<d;i++){
			int x,y,z;
			scanf("%d%d%d",&x,&y,&z);
			g[x][y]=g[y][x]=z;
		}
		bfs[e][b]=0;
		priority_queue<pair<int,pair<int,int> > >Q;
		Q.push(make_pair(0,make_pair(e,b)));
		while(Q.size()){
			int cost=-Q.top().first;
			int at=Q.top().second.first;
			int val=Q.top().second.second;
			Q.pop();
			if(V[at][val])continue;
			V[at][val]=1;
			for(int i=0;i<a;i++){
				if(~g[at][i]&&val>=g[at][i]&&cost+g[at][i]<bfs[i][val-g[at][i]]){
					bfs[i][val-g[at][i]]=cost+g[at][i];
					Q.push(make_pair(-cost-g[at][i],make_pair(i,val-g[at][i])));
				}
			}
			if(v[at]&&val<b&&cost+1<bfs[at][val+1]){
				bfs[at][val+1]=cost+1;
				Q.push(make_pair(-cost-1,make_pair(at,val+1)));
			}
		}
		int ret=99999999;
		for(int i=0;i<=b;i++)ret=min(ret,bfs[f][i]);
		if(ret<99999999)printf("%d\n",ret);
		else printf("Help!\n");
	}
}