#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
void solve() {
int n, k;
cin >> n >> k;
vector<ll> v(n + 1);
for(int i = 1; i <= n; i++) {
cin >> v[i];
}
vector<vector<int>> g(n + 1);
for(int i = 1; i < n; i++) {
int u1, v1; cin >> u1 >> v1;
g[u1].push_back(v1);
g[v1].push_back(u1);
}
// int leaf = 1;
// for(int i = 1; i <= n; i++) {
// if(g[i].size() == 1) {
// leaf = 1;
// break;
// }
// }
vector<bool> vis(n + 1, 0);
auto dfs = [&](auto&& self, int u, ll sum, int c) -> ll {
if(c == k) {
return sum;
}
vis[u] = 1;
ll mx = 0;
for(auto &vv: g[u]) {
if(vis[vv]) continue;
mx = max(mx, self(self, vv, sum + v[vv], c + 1));
}
vis[u] = 0;
return mx;
};
ll ans = 0;
for(int i = 1; i <= n; i++) {
ans = max(ans, dfs(dfs, i, v[i], 1));
}
cout << ans << endl;
return;
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
int tc = 1;
// cin >> tc;
for (int t = 1; t <= tc; t++) {
// cout << "Case " << t << ": ";
solve();
}
return 0;
}