#include <bits/stdc++.h>

#define FAST ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define maxn 200005
#define pb push_back

using namespace std;

vector<long long> adj[maxn];
long long vrednosti[maxn];
vector<long long> redosled;
long long odozdo[maxn] = {};
long long odozgo[maxn] = {};
long long podstablo[maxn] = {};
long long suma[maxn] = {};
long long succ[maxn];
long long ukupno[maxn];

void dfs(long long u, long long x){
    podstablo[u] = 1;
    suma[u] = vrednosti[u];
    odozdo[u] = 0;
    for(auto cvor : adj[u]){
        if(cvor != x){
            succ[cvor] = u;
            dfs(cvor, u);
            podstablo[u] += podstablo[cvor];
            suma[u] += suma[cvor];
            odozdo[u] += suma[cvor] + odozdo[cvor];
        }
    }
}
long long processed[maxn] = {};
void bfs(long long u){
    queue<long long> red;
    red.push(u);
    while(!red.empty()){
        long long x = red.front();
        redosled.pb(x);
        red.pop();
        processed[x] = 1;
        for(auto cvor : adj[x]){
            if(!processed[cvor])
                red.push(cvor);
        }
    }
}


int main()
{
    long long n;
    cin >> n;
    for(long long i = 0; i < n - 1; i++){
        long long u, v;
        cin >> u >> v;
        adj[u].pb(v);
        adj[v].pb(u);
    }
    for(long long i = 1; i <= n; i++){
        cin >> vrednosti[i];
    }
    long long q;
    cin >> q;
    if(q == 0){
        dfs(1, 0);
        bfs(1);
        ukupno[1] = odozdo[1];
        for(long long i = 1; i < n; i++){
            odozgo[redosled[i]] = suma[1] - 2 * suma[redosled[i]] + ukupno[succ[redosled[i]]] - odozdo[redosled[i]];
            ukupno[redosled[i]] = odozgo[redosled[i]] + odozdo[redosled[i]];
        }
        long long rez = 1, mini = ukupno[1];
        for(long long i = 2; i <= n; i++){
            if(ukupno[i] < mini){
                rez = i;
                mini = ukupno[i];
            }
        }
        cout << rez << endl;
    }
    else{
        for(long long i = 1; i <= q + 1; i++){
            cout << "1" << endl;
        }
    }
    return 0;
}