#include using namespace std; using ll = long long; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector a(n); for(auto &&v : a) cin >> v; vector> g(n); for(int i = 1; i < n; i++){ int u, v; cin >> u >> v; u--, v--; g[u].insert(v); g[v].insert(u); } vector dp(n, 1 << 30); queue que; for(int i = 0; i < m; i++){ int v; cin >> v; v--; dp[v] = 0; que.emplace(v); } while(!que.empty()){ int v = que.front(); que.pop(); for(auto u : g[v]){ if(dp[v] + 1 >= dp[u]) continue; dp[u] = dp[v] + 1; que.emplace(u); } } priority_queue> pq; for(int v = 0; v < n; v++){ if(g[v].size() == 1){ pq.emplace(a[v], v); } } ll ans = 0; for(int t = 0; !pq.empty(); ){ auto [p, v] = pq.top(); pq.pop(); if(t >= dp[v]) continue; ans += p; if(!g[v].empty()){ int pr = *g[v].begin(); g[pr].erase(v); if(g[pr].size() <= 1){ pq.emplace(a[pr], pr); } } t++; } cout << ans << '\n'; }