#define _GLIBCXX_FILESYSTEM
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5+2;
const ll inf = 1e16;
int a[N];
ll dp[N][305],n,k;
vector<int> g[N],ch[N];
void dfs(int u,int p=0) {
dp[u][1] = a[u];
for(auto x: g[u]) {
if(x == p) continue;
dfs(x,u);
ch[u].push_back(x);
for(int i = 1; i < k; i++) {
dp[u][i+1] = max(dp[u][i+1],dp[x][i]+a[i]);
}
}
}
void solve() {
cin >> n >> k;
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 1; i < n; i++) {
int u,v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= k; j++) {
dp[i][j] = -inf;
}
}
dfs(1);
ll ans = 0;
for(int i = 1; i <= n; i++) {
if(ch[i].size() <= 1) {
ans = max(ans, dp[i][k]);
continue;
}
for(int j = 0; j < k; j++) {
ans = max(ans, dp[ch[i][0]][j] + dp[ch[i][1]][k - 1 - j] + a[i]);
}
}
cout << ans << '\n';
return;
}
int32_t main() {
ios_base::sync_with_stdio(false);cin.tie(NULL);
int tc = 1;
// cin >> tc;
for(int kase = 1; kase <= tc; kase++) {
//cout << "Case " << kase << ": ";
solve();
}
return 0;
}