#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

constexpr int INF = 1e9;

void warshall_floyd(vector<vector<int>>& d) {
    const int V = d.size();
    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(d[i][j], d[i][k] + d[k][j]);
            }
        }
    }
}

int main() {
    int N, M, L, K, A, H;
    while(cin >> N >> M >> L >> K >> A >> H, N) {
        vector<vector<int>> d(N, vector<int>(N, INF));
        vector<bool> fre(N, false);
        fre[A] = fre[H] = true;
        for(int i=0; i<L; ++i) {
            int l; cin >> l;
            fre[l] = true;
        }
        for(int i=0; i<N; ++i) {
            d[i][i] = INF;
        }
        for(int i=0; i<K; ++i) {
            int x, y, t;
            cin >> x >> y >> t;
            d[x][y] = d[y][x] = t;
        }
        warshall_floyd(d);
        for(int i=0; i<N; ++i) {
            for(int j=0; j<N; ++j) {
                if((!fre[i] || !fre[j]) && i != j) {
                    d[i][j] = INF;
                } else if(fre[i] && fre[j] && i != j && d[i][j] > M) {
                    d[i][j] = INF;
                }
            }
        }
        warshall_floyd(d);
        if(d[A][H] == INF) {
            cout << "Help!" << endl;
        } else {
            cout << d[A][H] + (d[A][H] > M ? d[A][H] - M : 0) << endl;
        }
    }
}
