#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
#include<utility>
#include<map>
#include<set>
#include<string>

using namespace std;
#define ll long long

typedef vector<vector<int> > Matrix;

const int INF = 100000000;
Matrix d,d2;

void warshall_floyd(Matrix d,int n) {
  for (int i = 0; i < n; i++)      
    for (int j = 0; j < n; j++)    
      for (int k = 0; k < n; k++){
        d[j][k] = min(d[j][k], d[j][i] + d[i][k]);
        d[k][j] = min(d[k][j], d[i][j] + d[k][i]);
        cout << j << "から" << k << d[j][k]  << endl;
        cout << k << "から" << j << d[k][j]  << endl;
      }
}

int main(){
    string S;
    ll N,M,L,K,A,H;
    while(1){
        cin >> N >> M >> L >> K >> A >> H;
        if( N == 0 && M == 0 && L == 0 && K == 0 && A == 0 && H == 0)break;
        vector<ll> l(L),X(K),Y(K),T(K);
        d = Matrix(N, vector<int>(N, INF));
        d2 = Matrix(N, vector<int>(N, INF));
        for (int i = 0; i < N; i++) d[i][i] = 0;

        for(int i = 0; i < L; i++){
            cin >> l[i];
        }
        for(int i = 0; i < K; i++){
            cin >> X[i] >> Y[i] >> T[i];
            d[X[i]][Y[i]] = T[i];
            d[Y[i]][X[i]] = T[i];
        }
        // warshall_floyd(d,N);
        for (int i = 0; i < N; i++)      
            for (int j = 0; j < N; j++)    
                for (int k = 0; k < N; k++){
                    d[j][k] = min(d[j][k], d[j][i] + d[i][k]);
                    d[k][j] = min(d[k][j], d[i][j] + d[k][i]);
                    // cout << j << "から" << k << d[j][k]  << endl;
                    // cout << k << "から" << j << d[k][j]  << endl;
                }

        // for (int i = 0; i < N; i++)      
        //     for (int j = 0; j < N; j++)   
        //         cout << i << "から" << j << "へ" << d[i][j] << endl;

        // sから冷蔵庫,gへ
        if(d[A][H] > M){
            d[A][H] = INF;
        }else{
            d2[A][H] = d[A][H];
        }
        for(int i = 0; i < L; i++){
            if(d[A][l[i]] > M){
                d[A][l[i]] = INF;
                d[l[i]][A] = INF;
            }else{
                d2[A][l[i]] = d[A][l[i]];
                d2[l[i]][A] = d[l[i]][A];
            }
            if(d[l[i]][H] > M){
                d[l[i]][H] = INF;
                d[H][l[i]] = INF;
            }else{
                d2[l[i]][H] = d[l[i]][H];
                d2[H][l[i]] = d[H][l[i]];
            }
        }

        for(int i = 0; i < L-1; i++){
            for(int j = i+1; j < L; j++){
                if(d[l[j]][l[i]] > M){
                    d[l[j]][l[i]] = INF;
                    d[l[i]][l[j]] = INF;
                }else{
                    d2[l[j]][l[i]] = d[l[j]][l[i]];
                    d2[l[i]][l[j]] = d[l[i]][l[j]];
                }
            }
        }
        // warshall_floyd(d2,N);
        for (int i = 0; i < N; i++)      
            for (int j = 0; j < N; j++)    
                for (int k = 0; k < N; k++){
                    d2[j][k] = min(d2[j][k], d2[j][i] + d2[i][k]);
                    d2[k][j] = min(d2[k][j], d2[i][j] + d2[k][i]);
                    // cout << j << "から" << k << d[j][k]  << endl;
                    // cout << k << "から" << j << d[k][j]  << endl;
                }
        // for (int i = 0; i < N; i++)      
        //     for (int j = 0; j < N; j++)   
        //         cout << i << "から" << j << "へ" << d2[i][j] << endl;

        if (d2[A][H] >= INF || (L == 0 && d2[A][H] > M)) cout << "Help!" << endl;
        else if(d2[A][H] <= M) cout << d2[A][H] << endl;
        else cout << d2[A][H]*2 - M << endl;
    }
}


Measured memory_bytes: 3240