#include #include #define rep(i, n) for(int i = 0; i < (n); ++i) using namespace std; typedef vector V; struct E{ int t, c; }; int n, m; int u[200]; vector t[200]; bool used[200]; V dfs(int x){ used[x] = true; V v(m + 1, u[x]); for(E& e: t[x]){ if(used[e.t]){ continue; } V p = dfs(e.t); V q = v; rep(i, m + 1){ rep(j, i - 2 * e.c + 1){ q[i] = max(p[j] + v[i - 2 * e.c - j], q[i]); } } v = q; } return v; } int main(){ cin >> n >> m; rep(i, n){ cin >> u[i]; } rep(i, n - 1){ int a, b, c; cin >> a >> b >> c; t[a].push_back({b, c}); t[b].push_back({a, c}); } cout << dfs(0)[m] << endl; return 0; }