#include <stdio.h>

#define min(a, b) (((a) < (b)) ? (a) : (b))
#define max(a, b) (((a) > (b)) ? (a) : (b))

#define INF 1000000000

int adj[100][100];
int d[100], flag[100];

void dijkstra(int n, int s) {
	int i;

	for (i = 0; i < n; i++) {
		d[i] = INF;
		flag[i] = 0;
	}

	d[s] = 0;
	while (1) {
		int min, from, to;

		min = INF;
		for (i = 0; i < n; i++)
			if (!flag[i] && d[i] < min)
				min = d[from = i];
		if (min == INF)
			break;

		flag[from] = 1;

		for (to = 0; to < n; to++)
			d[to] = min(d[to], min + adj[from][to]);
	}
}

int main(void) {
	int i, j, o;
	int n, m, l, k, a, h;

	while (scanf("%d %d %d %d %d %d", &n, &m, &l, &k, &a, &h), n) {
		int canFreeze[100] = {0};

		canFreeze[a] = canFreeze[h] = 1;
		for (i = 0; i < l; i++) {
			int x;
			scanf("%d", &x);
			canFreeze[x] = 1;
		}

		for (i = 0; i < n; i++)
			for (j = 0; j < n; j++)
				adj[i][j] = INF;
		for (i = 0; i < k; i++) {
			int x, y, t;
			scanf("%d %d %d", &x, &y, &t);
			adj[x][y] = adj[y][x] = t;
		}

		for (o = 0; o < n; o++)
			for (i = 0; i < n; i++)
				for (j = 0; j < n; j++)
					adj[i][j] = min(adj[i][j], adj[i][o] + adj[o][j]);

		for (i = 0; i < n; i++)
			for (j = 0; j < n; j++)
				if (!canFreeze[i] || !canFreeze[j] || adj[i][j] > m)
					adj[i][j] = INF;

		dijkstra(n, a);

		if (d[h] != INF)
			printf("%d\n", d[h] + max(0, d[h] - m));
		else
			puts("Help!");
	}

	return 0;
}