#include <bits/stdc++.h>   using namespace std;   const long long MX = 3009;   long long x[MX], par[MX], num[MX], ans = 0;   pair<long long, pair<long long, long long> > edg[MX];   void MS(long long v) {     par[v] = -1;     num[v] = x[v];   }   long long FS(long long v) {     if (par[v] < 0) return v;     return par[v] = FS(par[v]);   }   void US(long long a, long long b) {     a = FS(a), b = FS(b);     if (a == b) return;     if (par[a] > par[b]) swap(a, b);     par[a] += par[b];     par[b] = a;     num[a] += num[b];   }   int32_t main() {     ios::sync_with_stdio(0);     cin.tie(0);     long long n;     cin >> n;     for (long long i = 0; i < n - 1; i++) {       long long u, v, w;       cin >> u >> v >> w;       edg[i] = {w, {u, v}};     }     for (long long i = 1; i <= n; i++) cin >> x[i];     for (long long i = 1; i <= n; i++) MS(i);     sort(edg, edg + n - 1);     for (long long i = 0; i < n - 1; i++) {       long long u = edg[i].second.first, v = edg[i].second.second,                 w = edg[i].first;       long long maxx = 0, sum = 0, res = 1;       for (long long j = 1; j <= n; j++) {         if (par[j] < 0) {           maxx = max(maxx, -par[j]);           sum += num[j];         }       }       for (long long j = 1; j <= n; j++) {         if (par[j] < 0) {           if (sum - num[j] < -par[j]) res = 0;         }       }       if (res) ans = w;       US(u, v);     }     cout << ans;     return 0;   }   