#include<bits/stdc++.h>
#define int long long
const int N = 600;
using namespace std;
int n, m;
int ans;
int v[N];
int sz[N];
int f[N][N][3];
vector <int> G[N];
void dp (int u, int fa) {
sz[u] = 1;f[u][1][0] = v[u];f[u][1][1] = v[u];
for (auto v1 : G[u]) {
if (v1 == fa) continue;
dp(v1, u);
sz[u] += sz[v1];
for (int i = min (m, 3 * sz[u]); i; --i) {
for (int j = 1; j < min(i, 3 * sz[v1]); ++j) {
if (i - j - 2 >= 0) {
f[u][i][1] = max(f[u][i][1], f[v1][j][1] + f[u][i - j - 2][1]);
f[u][i][0] = max(f[u][i][0], f[v1][j][1] + f[u][i - j - 2][0]);
}
f[u][i][0] = max(f[u][i][0], f[v1][j][0] + f[u][i - j - 1][1]);
}
}
}
}
signed main() {
freopen("food.in","r",stdin);
freopen("food.out","w",stdout);
cin >> n >> m;
for (int i = 1;i <= n; ++i) cin >> v[i];
for (int i = 1; i < n; ++i) {
int u, v; cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
dp(1, 0);
for (int i = 1; i <= 521; ++i) ans = max ({ans,f[1][i][1],f[1][i][0]});
cout << ans;
return 0;
}