from heapq import * N,M,K = map(int,input().split()) C = list(map(int,input().split())) INF = 10 ** 16 KN = K * N E = [[] for _ in range(N)] for i in range(M): u,v = map(int,input().split()) u -= 1 v -= 1 E[u].append((v,i)) E[v].append((u,i)) D = [INF] * ((K+1) * N) D[0] = 0 def dijkstra(): q = [(0,0)] while q: d, u1 = heappop(q) if d > D[u1]: continue k = u1 // N u = u1 % N for v,i in E[u]: if k < K: a = v + N * (k + 1) if D[a] > D[u1]: D[a] = D[u1] heappush(q, (D[a], a)) a = v + k * N if D[a] > D[u1] + C[i]: D[a] = D[u1] + C[i] heappush(q, (D[a], a)) return dijkstra() ans = INF for i in range(1,K+2): ans = min(ans,D[N * i - 1]) if ans == INF: print(-1) else: print(ans)