#include <iostream>
#include <algorithm>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::pair;
using std::make_pair;
using std::vector;
using std::min;

struct Coord {
    int y; int x;
};

void Warshall (vector<vector<int> > &cost) {
    int town_number = cost[0].size();
    for (int k = 0; k < town_number; k++) {
        for (int i = 0; i < town_number; i++) {
            for (int j = 0; j < town_number; j++) {
                cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]);
            }
        }
    }
    return;
}

int main(void) {
    int n; // ????????°
    int m; // ???????????????????????§?????¶?????????
    int l; // ??????????¨??????????????????° 
    int k; // ?????¨????????´??\?????¶???????????°
    int a; // ??¬?????????????????¨????????? towm[a] = 1
    int h; // ????§??§??????¬?????????????????¢????????????????????? town[h] = 2

    int temp_input; // ??\??????????????????
    int cost_input; // ??\??????????????????
    Coord coord; // ??\??????????????????

    while (1) {
        cin >> n >> m >> l >> k >> a >> h;
        if (n == 0 && m == 0 && l == 0 && k == 0 && a == 0 && h == 0) {
            break; 
        }
        vector<int> status(n, 0); 
        for (int input = 0; input < l; input++) {
            cin >> temp_input; 
            status[temp_input] = 1; // ??????????¨?????????????????????? 
        }

        vector<vector<int> > cost(n, vector<int>(n, 1e09));
        for (int i = 0; i < n; i++) {
            cost[i][i] = 0;
        }
        for (int input = 0; input < k; input++) {
            cin >> coord.y >> coord.x >> cost_input;
            cost[coord.y][coord.x] = cost_input;
            cost[coord.x][coord.y] = cost_input;
        }
        Warshall (cost); 

        int new_number = 0;
        int new_number2;
        vector<vector<int> > cost_limit(l + 2, vector<int>(l + 2, 1e09));
        for (int i = 0; i < l + 2; i++) {
            cost_limit[i][i] = 0;
        }
        cost_limit[0][l + 1] = cost[a][h];
        cost_limit[l + 1][0] = cost[h][a];
        for (int i = 0; i < n; i++) {
            if (status[i] == 1) {
                new_number++;
                cost_limit[0][new_number] = cost[a][i]; 
                cost_limit[new_number][0] = cost[a][i]; 
                cost_limit[l + 1][new_number] = cost[h][i]; 
                cost_limit[new_number][l + 1] = cost[h][i]; 
                new_number2 = 0;
                for (int j = 0; j < n; j++) {
                    if (status[j] == 1) {
                        new_number2++;
                        cost_limit[new_number][new_number2] = cost[i][j]; 
                    }
                }
            }
        }
        for (int i = 0; i < l + 2; i++) {
            for (int j = 0; j < l + 2; j++) {
                if (cost_limit[i][j] > m) {
                    cost_limit[i][j] = 1e09;
                }
            }
        }
        Warshall (cost_limit); 
        if (cost_limit[0][l + 1] >= 1e09) {
            cout << "Help!" << endl; 
        } else if (cost_limit[0][l + 1] <= m) {
            cout << cost_limit[0][l + 1] << endl;
        } else {
            cout << 2 * cost_limit[0][l + 1] - m << endl;
        }
    }
    return 0;
}

Measured memory_bytes: 3180