#include "bits/stdc++.h"
using namespace std;
typedef pair<int,int> pii;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define pb push_back
#define INF 999999999

int n,m,l,k,a,h;
bool cold[200];

#define MAX_V 101
#define MAX_B 101

struct edge{pii to;int cost;};
vector<edge> G[MAX_V][MAX_B];
int d[MAX_V][MAX_B];

void dijkstra(pii s,int V){
    priority_queue< pair<int,pii>,vector<pair<int,pii>>,greater<pair<int,pii>> > que;
    rep(i,MAX_V)rep(j,MAX_B)d[i][j]=INF;
    d[s.first][s.second]=0;
    que.push(make_pair(0,s));
    
    while(que.size()){
        pair<int,pii> p=que.top();
        que.pop();
        
        int v=p.second.first;
        int b=p.second.second;
        if(d[v][b]<p.first)continue;
        
        rep(i,G[v][b].size()){
            edge e=G[v][b][i];
            if(d[e.to.first][e.to.second]>d[v][b]+e.cost){
                d[e.to.first][e.to.second]=d[v][b]+e.cost;
                que.push(make_pair(d[e.to.first][e.to.second],e.to));
            }
        }
    }
}




int main(){
    while(cin>>n>>m>>l>>k>>a>>h && (n||m||l||k||a||h)){
        rep(i,MAX_V)rep(j,101)G[i][j].clear();
        rep(i,200)cold[i]=false;
        
        rep(i,l){
            int a;
            cin>>a;
            cold[a]=true;
        }

        rep(i,k){
            int x,y,t;
            cin>>x>>y>>t;
            rep(j,m+1){     //??????????????¨???????§?????????????????????????
                if(j-t<0)continue;
                G[x][j].pb(edge{pii(y,j-t),t});
                G[y][j].pb(edge{pii(x,j-t),t});
            }
        }
        
        rep(i,n){           //????????????????????????????????????????????????
            if(cold[i]==false)continue;
            rep(j,m){
                G[i][j].pb(edge{pii(i,j+1),1});
            }
        }
        
        
        dijkstra(pii(a,m),n);
        
        int mini = INF;
        rep(i,101)mini = min(mini,d[h][i]);
        if(mini==INF)cout<<"Help!"<<endl;
        else cout<<mini<<endl;
        
    }
}