#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define all(v) v.begin(),v.end()
#define endl '\n'
#pragma GCC target("popcnt")
#define bug(...) __f (#__VA_ARGS__, __VA_ARGS__);
template <typename Arg1>void __f (const char* name, Arg1&& arg1) {cout << name << " : " << arg1 << endl;}template <typename Arg1, typename... Args>void __f (const char* names, Arg1&& arg1, Args&&... args){const char* comma = strchr (names + 1, ',');cout.write (names, comma - names) << " : " << arg1 << " | "; __f (comma + 1, args...);}
const ll N = 1e5+1;
const ll M = 31;
vector<ll> g[N];
ll val[N], sum[N], vis[N], ancestor[N][M];
ll n, k, x, y;
void dfs(ll v){
vis[v] = 1;
for(auto u:g[v]){
if(!vis[u]){
sum[u] += sum[v];
ancestor[u][0] = v;
dfs(u);
}
}
}
ll kthances(ll u, ll k){
for(ll i=0; i<M; i++)
if(k&(1<<i)) u = ancestor[u][i];
return u;
}
void solve(ll cs) {
cin >> n >> k;
for(ll i=1; i<=n; i++) cin >> val[i], sum[i] = val[i];
for(ll i=0; i<n-1; i++){
cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
for(ll j=1; j<M; j++)
for(ll i=1; i<=n; i++)
ancestor[i][j] = ancestor[ancestor[i][j-1]][j-1];
k--;
ll ans = 0;
for(ll i=1; i<=n; i++){
ll kt = kthances(i, k);
if(kt==0) continue;
else{
if(kt==1) ans = max(ans, sum[i]);
else {
ll kt1 = kthances(kt, 1);
ans = max(ans, sum[i]-sum[kt1]);
}
}
}
cout << ans << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
ll t=1, cs=1;
//cin>>t;
while(t--) {
solve(cs++);
}
return 0;
}