#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1000000007;
const long long BIG = 1446803456761533460;
const int Big = 336860180;
stringstream sss;
const long long int maxn = 3010;
long long int n;
long long int cnt[maxn], sz[maxn];
long long int rt[maxn];
pair<long long int, pair<long long int, long long int> > es[maxn];
long long int root(long long int x) {
  return x == rt[x] ? x : rt[x] = root(rt[x]);
}
void MAIN() {
  cin >> n;
  for (long long int i = (0); i < (n - 1); ++i) {
    long long int a, b, c;
    cin >> a >> b >> c;
    --a, --b;
    es[i] = {c, {a, b}};
  }
  long long int sum = 0;
  for (long long int i = (0); i < (n); ++i) cin >> cnt[i], sum += cnt[i];
  sort(es, es + n - 1);
  iota(rt, rt + n, 0);
  fill(sz, sz + n, 1);
  long long int ans = 0;
  for (long long int i = (0); i < (n - 1); ++i) {
    ans = es[i].first;
    long long int ra = root(es[i].second.first), rb = root(es[i].second.second);
    sz[ra] += sz[rb];
    cnt[ra] += cnt[rb];
    rt[rb] = ra;
    if (sum - cnt[ra] < sz[ra]) break;
  }
  cout << ans << '\n';
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cout << fixed << setprecision(10);
  sss << R"(
4
1 2 1
2 3 2
3 4 3
1
1
1
1
    )";
  MAIN();
  return 0;
}
