int u[3d3],v[3d3],l[3d3],x[3d3]; int costs[1d7]; int visited[3d3]; ll saveds[3d3]; int steps[1d7],fs[1d7]; int stepn; ll totalcost; ll totalsaved; wgraph g; HLD h; { int @n,@q,@c; rd((u--,v--,l)(n-1)); rd((x--)(q)); g.setEdge(n,n-1,u,v,l); h.init(g.g); rep(i,n-1){ costs[u[i]+3000*v[i]]=l[i]; costs[v[i]+3000*u[i]]=l[i]; } { int p=x[0]; steps[stepn++]=p; rep(k,q){ int y=x[k]; int a=h.lca(p,y); while(p!=a){ p=h.up(p); steps[stepn++]=p; } stepn+=h.depth(y)-h.depth(a); int n=stepn; while(y!=a){ steps[--n]=y; y=h.up(y); } p=x[k]; fs[stepn-1]=1; } } { int p=steps[0]; visited[p]=1; ll saved=0; rep(stepi,1,stepn){ int y=steps[stepi]; int localcost=costs[p+3000*y]; saved+=localcost; totalcost+=localcost; if(visited[y]){ if(totalsaved