N,M,L = list(map(int, input().split(' '))) T = list(map(int, input().split(' '))) D = [] for _ in range(N): D.append([float('inf') for _ in range(N)]) for i in range(N): D[i][i] = 0 for _ in range(M): a,b,c = list(map(int, input().split(' '))) D[a-1][b-1] = c D[b-1][a-1] = c for k in range(N): for i in range(N): for j in range(N): D[i][j] = min(D[i][j], D[i][k]+D[k][j]) # k: where to collect # i: where to reach first distances = [float('inf') for _ in range(N*N)] for k in range(N): for i in range(N): distance = D[i][L-1] + D[k][i] * max(0, 2*T[i]-1) for j in range(N): if i == j or k == j: continue distance = distance + D[k][j] * T[j] * 2 distances[k * N + i] = distance print(min(distances))