#include <iostream>
#include <algorithm>

using namespace std;

const int INF = (1 << 20);

int main ( void )
{
	int n, m, l, k, a, h;
	int graph[100][100];
	bool flg[100];
	
	while (cin >> n >> m >> l >> k >> a >> h,
		n | m | l | k | a | h )
	{
		for ( int i = 0; i < n; ++i )
		{
			for ( int j = 0; j < n; ++j )
			{
				graph[i][j] = INF;
			}
			graph[i][i] = 0;
			flg[i] = false;
		}
		
		flg[a] = flg[h] = true;
		for ( int i = 0, x; i < l; ++i )
		{
			cin >> x;
			flg[x] = true;
		}
		
		for ( int i = 0, f, t, c; i < k; ++i )
		{
			cin >> f >> t >> c;
			graph[f][t] = graph[t][f] = c;
		}
		
		for ( int z = 0; z < n; ++z )
			for ( int x = 0; x < n; ++x )
				for ( int y = 0; y < n; ++y )
					graph[x][y] = min(graph[x][y], graph[x][z] + graph[z][y]);
					
		for ( int i = 0; i < n; ++i )
			for ( int j = 0; j < n; ++j )
			{
				if ( !flg[i] || !flg[j] )
				{
					graph[i][j] = INF;
				}
				else if ( graph[i][j] > m )
				{
					graph[i][j] = INF;
				}
			}
			
		for ( int z = 0; z < n; ++z )
			for ( int x = 0; x < n; ++x )
				for ( int y = 0; y < n; ++y )
					graph[x][y] = min(graph[x][y], graph[x][z] + graph[z][y]);
					
		if ( graph[a][h] == INF )
			cout << "Help!" << endl;
		else
			cout << graph[a][h] + max(0, graph[a][h] - m) << endl;
	}
	return 0;
}