use crate::flat_graph::Graph;
use proconio::input;
fn main() {
input! {
n: usize,
cap: usize,
values: [u64; n],
edges: [(usize, usize, usize); n - 1],
}
let cap = cap / 2;
let mut g = Graph::from_undirected_edges_with_weight(n, &edges);
let (_sorted, _parent) = g.sort_undirected_tree_with_weight(0);
let dp = dfs(0, &g, &values, vec![Some(0); cap + 1]);
let ans = dp.last().unwrap().unwrap();
println!("{ans}");
}
fn dfs(
x: usize,
g: &Graph<(usize, usize)>,
values: &[u64],
mut dp: Vec