n, k = map(int, input().split()) edges = [[] for _ in range(n)] for _ in range(n - 1): a, b, c = map(int, input().split()) a -= 1 b -= 1 edges[a].append((b, c)) edges[b].append((a, c)) wv = [] ans = 0 def dfs(pos, bpos, cc): if len(edges[pos]) == 1: ret = 1 if pos != 0: global ans ans += cc else: ret = 0 for npos, c in edges[pos]: if npos == bpos: continue tmp = dfs(npos, pos, cc + c) wv.append((c, c * tmp)) ret += tmp return ret dfs(0, -1, 0) dp = [0] * (k + 1) for w, v in wv: for i in range(k, w - 1, -1): dp[i] = max(dp[i], dp[i - w] + v) print(dp[-1] + ans)