#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <stack>
#include <queue>
#include <string>
#include <math.h>
 
#define REP(i,n)for (int i=0;i<(n);i++)
#define PB push_back
#define MP make_pair
#define ALL(a) (a).begin(),(a).end()
#define ll long long
using namespace std;
//typedef pair<int,int> P;
 
bool P[101];
int d[101][101];
int res[101];
 
int main(){
	int N,M,L,K,A,H,a,x,y,t;
	int v[150];
	while(1){
		cin>>N>>M>>L>>K>>A>>H;
		if(N+M+L+K+A+H==0)break;
		memset(P,false,sizeof(P));
		REP(i,101)REP(j,101)d[i][j]=1e7;
		REP(i,L)cin>>v[i];
		v[L]=A;v[L+1]=H;
		REP(i,K){cin>>x>>y>>t;d[x][y]=d[y][x]=t;}
		REP(i,N)d[i][i]=0;
		REP(k,N)REP(i,N)REP(j,N)d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
		//REP(i,N){REP(j,N)cout<<d[i][j]<<" ";cout<<endl;}
		REP(i,L+2)REP(j,L+2)if(d[v[i]][v[j]]>M)d[v[i]][v[j]]=1e7;
		REP(k,L+2)REP(i,L+2)REP(j,L+2)d[v[i]][v[j]]=min(d[v[i]][v[j]],d[v[i]][v[k]]+d[v[k]][v[j]]);
		//REP(i,N){REP(j,N)cout<<d[i][j]<<" ";cout<<endl;}
		if(d[A][H]==1e7)cout<<"Help!"<<endl;
		else cout<<d[A][H]+max(0,d[A][H]-M)<<endl;
	}
}
