#include <bits/stdc++.h>
using namespace std;
const int N = 200;
int n, m;
vector<int> lnk[N + 3];
int val[N + 3], dp[N + 3][N + 3];
void DP(int u, int fa) {
  for (auto v : lnk[u]) {
    if (v == fa) continue;
    DP(v, u);
  }
  dp[u][0] = val[u];
  for (auto v : lnk[u])
    if (v != fa) dp[u][0] += dp[v][m];
  for (int t = 1; t <= m; t++) {
    for (auto v : lnk[u]) {
      if (v == fa) continue;
      int res = dp[v][t - 1];
      for (auto v_ : lnk[u]) {
        if (v_ == fa || v_ == v) continue;
        res += dp[v_][max(t - 1, m - t)];
      }
      dp[u][t] = max(dp[u][t], res);
    }
  }
  for (int t = m; t >= 0; t--) dp[u][t] = max(dp[u][t + 1], dp[u][t]);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &val[i]);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    lnk[u].push_back(v);
    lnk[v].push_back(u);
  }
  DP(1, 0);
  printf("%d\n", dp[1][0]);
  return 0;
}
