#include <bits/stdc++.h>
using namespace std;
const int N = 3010;
int i, j, n, fa[N], sum[N], num[N], tot;
struct E {
  int u, v, w;
  bool operator<(const E& a) const { return w < a.w; }
} e[N];
int get(int x) {
  if (fa[x] == x) return x;
  return fa[x] = get(fa[x]);
}
int main() {
  scanf("%d", &n);
  for (i = 1; i < n; i++) scanf("%d %d %d", &e[i].u, &e[i].v, &e[i].w);
  for (i = 1; i <= n; i++) scanf("%d", sum + i);
  for (i = 1; i <= n; i++) fa[i] = i, num[i] = 1, tot += sum[i];
  sort(e + 1, e + n);
  for (i = 1; i < n; i++) {
    static int x, y;
    for (j = 1; j <= n; j++)
      if (fa[j] == j && num[j] > n / 2) break;
    if (num[j] > tot - sum[j]) break;
    x = get(e[i].u), y = get(e[i].v);
    if (x != y) {
      num[y] += num[x];
      sum[y] += sum[x];
      fa[x] = y;
    }
  }
  cout << e[i - 1].w << endl;
}
