#include <bits/stdc++.h>
using namespace std;
struct st {
  int sz, cp, pr;
} data[1 << 15];
int n;
int a, b, c, sm, ans;
vector<pair<int, pair<int, int>>> E(1);
int P(int x) {
  if (data[x].pr == x) return x;
  return data[x].pr = P(data[x].pr);
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    scanf("%d%d%d", &a, &b, &c);
    E.push_back({c, {a, b}});
  }
  sort(E.begin(), E.end());
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a);
    sm += a;
    data[i].pr = i;
    data[i].cp = a;
    data[i].sz = 1;
  }
  for (int i = 1; i <= n - 1; i++) {
    a = P(E[i].second.first);
    b = P(E[i].second.second);
    data[b].pr = a;
    data[a].sz += data[b].sz;
    data[a].cp += data[b].cp;
    ans = i;
    if (data[a].sz > sm - data[a].cp) break;
  }
  printf("%d", E[ans].first);
}
