#include using namespace std; // not... struct edge{ int next; long long cost; }; void chmax(long long &a, long long b){ if(a v[200]; long long A[200]; long long dp[250][1100]; void dfs(int a, int b){ for(int i=0;i<1010;i++){ dp[a][i]=-INF; } dp[a][0]=A[a]; for(edge e : v[a]) if(e.next!= b){ dfs(e.next,a); for(int i=1000;i>=0;i--){ if(dp[a][i]==INF) continue; for(int j=0;i+j+e.cost<=1000;j++){ chmax(dp[a][i+j+e.cost] , dp[a][i]+dp[e.next][j]); } } } } int main(){ cin >> n >> m; m/=2; for(int i=0;i> A[i]; } for(int i=0;i> a >> b >> c; v[a].push_back({b,c}); v[b].push_back({a,c}); } dfs(0,-1); long long ans =0; for(int i=0;i<=m;i++) chmax(ans,dp[0][i]); cout << ans << endl; return 0; }