import heapq N,M,K = list(map(int,input().split())) C = list(map(int,input().split())) edge = [[] for _ in range(N)] for i in range(M): u,v = list(map(int,input().split())) u -= 1;v -= 1 edge[u].append((v,C[i])) edge[v].append((u,C[i])) INF = 10**18 visited = [[INF for _ in range(K+1)] for _ in range(N)] q = [(0,0,0)] while(q): cost,pon,now = heapq.heappop(q) if(now == N-1): print(cost) exit() if(visited[now][pon] <= cost):continue visited[now][pon] = cost for v,w in edge[now]: if(visited[v][pon] <= cost+w):continue heapq.heappush(q,(cost+w,pon,v)) if(pon != K): for v,w in edge[now]: if(visited[v][pon+1] <= cost):continue heapq.heappush(q,(cost,pon+1,v)) print(-1)