#include<bits/stdc++.h>
#define p pair<int,int>
#define P pair<int,p>
using namespace std;

vector<p>rinsetu[100];
bool g[100];
int mincost[100][101];
int main(){
    int a,b,c,d,e,f;
    while(cin>>a>>b>>c>>d>>e>>f,a|b|c|d|e|f){
	for(int h=0;h<a;h++){
	    rinsetu[h].clear();
	    g[h]=false;
	    }
	for(int h=0;h<c;h++){
	    int i;scanf("%d",&i);
	    g[i]=true;
	    }
	    for(int h=0;h<d;h++){
		int i,j,k;scanf("%d%d%d",&i,&j,&k);
		rinsetu[i].push_back(p(k,j));
		rinsetu[j].push_back(p(k,i));
		}
	memset(mincost,0x3f,sizeof(mincost));
	mincost[e][0]=0;
	priority_queue<P,vector<P>,greater<P>>Q;
	Q.push(P(0,p(e,0)));
	while(Q.size()){
	    P t=Q.top();Q.pop();
	    int cost=t.first,to=t.second.first,time=t.second.second;
	    if(mincost[to][time]<cost)continue;
	    if(g[to]){
		for(int i=0;i<time;i++){
		    if(mincost[to][i]>cost+time-i){
			mincost[to][i]=cost+time-i;
			Q.push(P(mincost[to][i],p(to,i)));
			}
		    }
		}
	   for(p i:rinsetu[to]){
	      int k=time+i.first;
	      if(k>b)continue;
	      if(mincost[i.second][k]>cost+i.first){
		  mincost[i.second][k]=cost+i.first;
		  Q.push(P(cost+i.first,p(i.second,k)));
		  }
	       }	
	    }
	  int MIN=1<<29;
	   for(int i=0;i<=b;i++)MIN=min(MIN,mincost[f][i]);
	   if(MIN==1<<29)puts("Help!");
	   else cout<<MIN<<endl; 
	}
    }