#include using namespace std; const int N=2005; int m[N][N],a[N],f[N][N],n,t; vector g[N]; void dfs(int u,int fa){ for (auto v:g[u]){ if (v==fa) continue; for(int i=0;i<=t-m[u][v]*2;i++)f[v][i]+=a[v]; dfs(v,u); for (int j=t;j>=2*m[u][v];j--){ for (int k=0;k<=j-m[u][v]*2;k++) f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]); } } } signed main () { cin>>n>>t; for (int i=1;i<=n;i++) cin>>a[i]; int u,v,w; for (int i=1;i<=n-1;i++){ cin>>u>>v>>w; u++; v++; m[u][v]=w; m[v][u]=w; g[u].push_back(v); g[v].push_back(u); } dfs(1,0); cout<