#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cctype>
#include <climits>
#include <string>
#include <bitset>
using namespace std;
typedef long double ld;
typedef long long int ll;
typedef unsigned long long int ull;
typedef vector<int> vi;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<ll> vll;
typedef vector<pair<int,int> > vpii;
typedef vector<vector<int> > vvi;
typedef vector<vector<char> > vvc;
typedef vector<vector<string> > vvs;
typedef vector<vector<ll> > vvll;
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define rrep(i,n) for(int i = 1; i <= (n); ++i)
#define drep(i,n) for(int i = (n)-1; i >= 0; --i)
#define fin(ans) cout<<(ans)<<endl
#define STI(s) atoi(s.c_str())
#define mp(p,q) make_pair(p,q)
#define pb(n) push_back(n)
#define Sort(a) sort(a.begin(),a.end())
#define Rort(a) sort(a.rbegin(),a.rend())
template<class T> inline bool chmax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
template<class T> inline bool chmin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
const int P = 1000000007;
const int INF = INT_MAX;
const long long LLINF = 1LL<<60;
//g++ -std=c++1z temp.cpp
//./a.out

class WAR_FLY {
public:
    vvi d; //辺の数
    int V; //頂点の数
    
    WAR_FLY(int n) {
        V = n;
        d = vector<vector<int> > (n,vector<int>(n));
        for(int i = 0; i < V; i++) {
            for(int j = 0; j < V; j++) {
                if(i == j) {
                    d[i][j] = 0;
                }
                else {
                    d[i][j] = INF;
                }
            }
        }
    }

    void warshall_floyd() {
        for(int k = 0; k < V; k++) {
            for(int i = 0; i < V; i++) {
                for(int j = 0; j < V; j++) {
                    d[i][j] = min((ll)d[i][j], (ll)d[i][k] + (ll)d[k][j]);
                }
            }
        }
    }

    void add(int from, int to, int cost) {
        d[from][to] = cost;
    }

    bool is_negative_loop() {
        for(int i = 0; i < V; i++) {
            if(d[i][i] < 0) return true;
        }
        return false;
    }

    void show() {
        for(int i = 0; i < V; i++) {
            for(int j = 0; j < V; j++) {
                cout << d[i][j] << " ";
            }
            cout << endl;
        }
    }
};

int main(void){ios::sync_with_stdio(false);cin.tie(0);
//////////////////////////////////////////////////////
	int n,m,l,k,a,h;

    vector<string> ans;
    
    while(1){
        cin>>n>>m>>l>>k>>a>>h;
        if(n==0&&m==0&&l==0)break;
        int L;
        WAR_FLY wa(n);
        set<int> se;
        rep(i,l){
            cin>>L;
            se.insert(L);
        }
        int x,y,t;
        for(int i=0;i<k;i++){
            cin>>x>>y>>t;
            wa.add(x,y,t);
            wa.add(y,x,t);
        }
        wa.warshall_floyd();
        // wa.show();
        rep(i,n)rep(j,n)if(wa.d[i][j]>m) wa.d[i][j]=INF;
        rep(i,n)rep(j,n){
            bool ini=false,inj=false;
            if(a==i||h==i||se.find(i)!=se.end())ini=true;
            if(a==j||h==j||se.find(j)!=se.end())inj=true;
            if(!ini||!inj)wa.d[i][j]=INF;
        }
        wa.warshall_floyd();
        // wa.show();
        int A=wa.d[a][h]+max(0,wa.d[a][h]-m);
        if(A<0)ans.push_back("Help!");
        else ans.push_back(to_string(A));
    }
    for(int i=0;i<ans.size();i++){
        cout<<ans[i]<<endl;
    }
    
/////////////////////////////////////////////////////
return 0;}



Measured memory_bytes: 3384