// I AM A MUSLIM
#include "bits/stdc++.h"
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define fast_io std::ios::sync_with_stdio(0);std::cin.tie(0)
#define lli long long int
#define flush fflush(stdout)
#define line printf("\n")
#define yn(a, b) printf("%s\n", (a) >= (b) ? "Yes":"No")
#define amodm(a, M) (((a)%M+M)%M)
// #define int lli
using pii = std::pair<int,int>;
const int MOD = 1000000007;
const int mxN = 100100;
int n, k;
std::vector<int> g[mxN];
lli dp[mxN][305], a[mxN];
void dfs(int u, int p=-1) {
std::vector<int> child;
for (auto &v : g[u]) {
if (v == p) continue;
child.push_back(v);
dfs(v, u);
}
if (child.size()) {
if (child.size() == 1) {
for (int i = 0; i < k; i++) {
if (dp[child[0]][i]) dp[u][1+i] = dp[child[0]][i] + a[u];
}
} else {
for (int i = 0; i < k; i++) {
if (dp[child[0]][i]) dp[u][1+i] = dp[child[0]][i] + a[u];
}
for (int i = 0; i < k; i++) {
if (dp[child[1]][i]) dp[u][1+i] = std::max(dp[u][i+1], dp[child[1]][i] + a[u]);
}
for (int i = 0; i < k; i++) {
int j = k-1 -i;
if (dp[child[0]][i] && dp[child[1]][j]) dp[u][1+i+j] = std::max(dp[u][1+i+j], dp[child[0]][i] + dp[child[1]][j] + a[u]);
if (dp[child[1]][i] && dp[child[0]][j]) dp[u][1+i+j] = std::max(dp[u][1+i+j], dp[child[1]][i] + dp[child[0]][j] + a[u]);
}
}
} else {
dp[u][1] = a[u];
}
}
signed main() {
int testCases=1;
for (int TC = 1; TC <= testCases; TC++) {
scanf("%d",&n);
scanf("%d",&k);
for (int i = 1; i <= n; i++) scanf("%lld",&a[i]);
for (int i = 0, u, v; i < n-1; i++) {
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1);
lli ans = 0;
for (int i = 1; i <= n; i++) {
if (dp[i][k] > ans) ans = dp[i][k];
}
printf("%lld\n", ans);
}
return 0;
}