#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int n,m,l,k,a,h;
bool R[100];
int dis[100][101];
int main()
{
	while(cin>>n>>m>>l>>k>>a>>h,n)
	{
		for(int i=0;i<n;i++)R[i]=0;
		for(int i=0;i<l;i++)
		{
			int u;cin>>u;R[u]=1;
		}
		vector<vector<pair<int,int> > >G(n);
		for(int i=0;i<k;i++)
		{
			int u,v,c;cin>>u>>v>>c;
			G[u].push_back(make_pair(v,c));
			G[v].push_back(make_pair(u,c));
		}
		for(int i=0;i<n;i++)for(int j=0;j<=m;j++)dis[i][j]=1e9;
		dis[a][m]=0;
		priority_queue<pair<int,pair<int,int> > >P;
		P.push(make_pair(0,make_pair(a,m)));
		while(!P.empty())
		{
			int c=-P.top().first;
			int u=P.top().second.first,L=P.top().second.second;
			P.pop();
			if(dis[u][L]<c)continue;
			for(int i=L;i<=(R[u]?m:L);i++)
			{
				for(int j=0;j<G[u].size();j++)
				{
					if(i<G[u][j].second)continue;
					int v=G[u][j].first;
					int cost=G[u][j].second;
					if(dis[v][i-cost]>c+(i-L)+cost)
					{
						dis[v][i-cost]=c+(i-L)+cost;
						P.push(make_pair(-dis[v][i-cost],make_pair(v,i-cost)));
					}
				}
			}
		}
		int ans=1e9;
		for(int i=0;i<=m;i++)ans=min(ans,dis[h][i]);
		if(ans<1e9)cout<<ans<<endl;
		else cout<<"Help!"<<endl;
	}
}

