from heapq import heappop, heappush
from math import inf
import sys
def solve_least_time(dis, g, n, mag, k, H):
h = [(0, 1, 0)]
while h:
d, i, used_k = heappop(h)
if d > dis[i][used_k]:
continue
for j, w in g[i]:
if used_k < k and mag[j] < 0:
nd = d + w + mag[j] + H
if nd < dis[j][used_k + 1]:
dis[j][used_k + 1] = nd
heappush(h, (nd, j, used_k + 1))
nd = d + w + max(mag[j], 0)
if nd < dis[j][used_k]:
dis[j][used_k] = nd
heappush(h, (nd, j, used_k))
if __name__ == "__main__":
n, m, k = map(int, input().split())
mag = [0] + list(map(int, input().split()))
H = -min(min(mag[1:]), 0)
g = [[] for _ in range(n+1)] # 按照1--n编号存储
for _ in range(m):
u, v, w = map(int, input().split())
g[u].append((v, w))
g[v].append((u, w))
dis = [[inf] * (k + 1) for _ in range(n + 1)]
dis[1][0] = 0
solve_least_time(dis, g, n, mag, k, H)
# ans = min([dis[n][i] - H * i for i in range(0, k+1) if dis[n][i] < inf])
ans = inf
for i in range(k+1):
if dis[n][i] < inf:
ans = min(ans, dis[n][i] - H * i)
if ans < inf:
print(ans)
else:
print("NO")