import heapq
from collections import defaultdict
n,m,l,s,e=map(int,input().split())
def dijkstra(graph, start):
    """
    ダイクストラ法を用いて、startから各頂点への最短距離を求めます。

    Parameters:
        graph: dict
            各頂点をキーとし、その頂点から出る辺を (隣接頂点, 重み) のタプルのリストとして持つ辞書
            例:
                graph = {
                    0: [(1, 2), (2, 5)],
                    1: [(2, 1), (3, 3)],
                    2: [(3, 1)],
                    3: []
                }
        start: 始点となる頂点

    Returns:
        dist: dict
            各頂点への最短距離を表す辞書。到達不能の場合は float('inf') が設定されます。
    """
    # 各頂点への最短距離を無限大で初期化(始点のみ0)
    dist = {vertex: float('inf') for vertex in graph}
    dist[start] = 0

    # 優先度付きキュー(ヒープ)に (距離, 頂点) のペアを格納
    queue = [(0, start)]

    while queue:
        current_dist, u = heapq.heappop(queue)
        # すでにより良い経路が見つかっている場合はスキップ
        if current_dist > dist[u]:
            continue

        # uから出る全ての辺について、最短距離を更新
        for v, weight in graph[u]:
            new_dist = current_dist + weight
            if new_dist < dist[v]:
                dist[v] = new_dist
                heapq.heappush(queue, (new_dist, v))

    return dist
G=defaultdict(list)
for _ in range(m):
    a,b,t=map(int,input().split())
    G[a].append((b,t))
    G[b].append((a,t))
D1=dijkstra(G,1)
D2=dijkstra(G,n)
T=list(map(int,input().split()))
ans=float("inf")
for i in T:
    if i in D1 and i in D2 and D1[i]<=s+e:
        ans=min(ans,max(s,D1[i])+1+D2[i])
print(ans if ans!=float("inf") else -1)