import sys input = sys.stdin.readline N, M = map(int, input().split()) M //= 2 U = [0] * N for i in range(N): U[i] = int(input()) G = [[] for i in range(N)] for i in range(N - 1): u, v, c = map(int, input().split()) G[u].append((v, c)) G[v].append((u, c)) def non_rec_dfs(s): stack = [s] dp = [[0] * (M + 1) for _ in range(N)] for i in range(N): for j in range(M + 1): dp[i][j] = U[i] par = [-1] * N while stack: u = stack.pop() if u >= 0: stack.append(~u) for v, c in G[u]: if v == par[u]: continue par[v] = u stack.append(v) else: u = ~u for v, c in G[u]: if v == par[u]: continue for i in range(M, -1, -1): for j in range(M + 1): if i - c - j < 0: break dp[u][i] = max(dp[u][i], dp[u][i - c - j] + dp[v][j]) return max(dp[0]) print(non_rec_dfs(0))