#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair P; typedef vector V; typedef complex Point; #define PI acos(-1.0) #define EPS 1e-10 const ll INF = 1e16; const ll MOD = 1e9 + 7; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define rep(i,N) for(int i=0;i<(N);i++) #define ALL(s) (s).begin(),(s).end() #define EQ(a,b) (abs((a)-(b))=0;i--){ rep(j,2001){ if(i-c-j >= 0)dp[now][i] = max(dp[now][i-c-j]+dp[to][j],dp[now][i]); } } } vector G[200]; bool used[200]; void solve(int now){ used[now] = true; rep(i,G[now].size()){ ll to = G[now][i].to; if(used[to])continue; solve(to); update(now,to,G[now][i].cost); } } int main(){ cin >> n >> m; rep(i,n)cin >> u[i]; rep(i,n-1){ ll a,b,c; cin >> a >> b >> c; G[a].push_back(edge(b,2*c)); G[b].push_back(edge(a,2*c)); } rep(i,200)rep(j,2000+1)dp[i][j] = -INF; rep(i,n)dp[i][0] = u[i]; solve(0); ll ans = 0; rep(i,m+1)ans = max(ans,dp[0][i]); cout << ans << endl; }