#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; class Edge { public: int to, cost; Edge(int to, int cost){ this->to = to; this->cost = cost; } }; int m; vector u; vector > edges; void solve(int curr, int prev, vector& ans) { ans.resize(m+1, u[curr]); for(const Edge& e : edges[curr]){ if(e.to == prev) continue; vector v; solve(e.to, curr, v); for(int i=m; i>=0; --i){ for(int j=0; i+j+e.cost<=m; ++j){ ans[i+j+e.cost] = max(ans[i+j+e.cost], ans[i] + v[j]); } } } } int main() { int n; cin >> n >> m; m /= 2; u.resize(n); for(int i=0; i> u[i]; edges.resize(n); for(int i=0; i> a >> b >> c; edges[a].push_back(Edge(b, c)); edges[b].push_back(Edge(a, c)); } vector v; solve(0, -1, v); cout << v[m] << endl; return 0; }