#include using namespace std; #define int long long #define pr pair #define pb push_back #define mk make_pair #define fi first #define se second #define N 210 #define M 2100 int n,m,dp[N][M],cnt[M],now[M],u,v,w,ans; vector g[N]; void dfs(int x,int from){ memset(now,0,sizeof(now)); for(int i=0;i<=m;i++){ dp[x][i]=cnt[x]; } for(auto v:g[x]){ if(v.fi!=from){ dfs(v.fi,x); for(int k=m/2*2;k>=v.se*2;k-=2){ for(int j=0;j<=k-2*v.se;j+=2){ dp[x][k]=max(dp[x][k],dp[x][k-j-2*v.se]+dp[v.fi][j]); } } } } return ; } signed main(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>cnt[i]; } for(int i=1;i<=n-1;i++){ cin>>u>>v>>w; u++; v++; g[u].pb(mk(v,w)); g[v].pb(mk(u,w)); } dfs(1,0); for(int i=0;i<=m;i++){ ans=max(ans,dp[1][i]); } cout<