n, m = map(int, input().split()) U = [int(input()) for _ in range(n)] G = [[] for _ in range(n)] for _ in range(n-1): a, b, c = map(int, input().split()) G[a].append((b, c)) G[b].append((a, c)) def dfs(u, p): cur = {0 : U[u]} for v, c in G[u]: if v == p: continue nxt = list(dfs(v, u).items()) for t1, x in list(cur.items()): for t2, y in nxt: t = t1+t2+c*2 if t <= m: cur[t] = max(cur.get(t, 0), x+y) return cur print(max(dfs(0, 0).values()))