import heapq N, M, K = map(int, input().split()) C = list(map(int, input().split())) edges = [[[] for _ in range(K+1)] for _ in range(N)] for i in range(M): u, v = map(int, input().split()) u -= 1 v -= 1 for j in range(K+1): edges[u][j].append((v, j, C[i])) edges[v][j].append((u, j, C[i])) for j in range(K): edges[u][j].append((v, j+1, 0)) edges[v][j].append((u, j+1, 0)) def dijkstra(start, end): dist = [[float('inf')] * (K+1) for _ in range(N)] dist[start][0] = 0 pq = [(0, start, 0)] while pq: d, u, k = heapq.heappop(pq) if d > dist[u][k]: continue for v, nk, cost in edges[u][k]: nd = d + cost if nd < dist[v][nk]: dist[v][nk] = nd heapq.heappush(pq, (nd, v, nk)) return min(dist[end]) result = dijkstra(0, N-1) if result == float('inf'): print(-1) else: print(result)