package main
import (
"bufio"
"fmt"
"os"
)
type Edge struct {
to, w int
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for tc := 0; tc < t; tc++ {
var n int
fmt.Fscan(reader, &n)
adj := make([][]Edge, n+1)
for i := 0; i < n-1; i++ {
var u, v, w int
fmt.Fscan(reader, &u, &v, &w)
adj[u] = append(adj[u], Edge{v, w})
adj[v] = append(adj[v], Edge{u, w})
}
var q int
fmt.Fscan(reader, &q)
for i := 0; i < q; i++ {
var l int
fmt.Fscan(reader, &l)
var solve func(u, p int) (int, int)
solve = func(u, p int) (int, int) {
sumMins := 0
totalX := 0
for _, e := range adj[u] {
if e.to != p {
x, dpv := solve(e.to, u)
totalX += x
if dpv < e.w {
sumMins += dpv
} else {
sumMins += e.w
}
}
}
req := l
if p != 0 {
for _, e := range adj[u] {
if e.to == p {
req = l - e.w
break
}
}
}
if req < 0 {
req = 0
}
dpu := sumMins
xu := 0
if dpu < req {
xu = req - dpu
dpu = req
}
return totalX + xu, dpu
}
maxAns := 0
for root := 1; root <= n; root++ {
ans, _ := solve(root, 0)
if ans > maxAns {
maxAns = ans
}
}
fmt.Fprintln(writer, maxAns)
}
}
}