#include<bits/stdc++.h>
using namespace std;
int N,Q,x,y,posecen[200009],A[200009];
vector<int>graf[200009];
queue<int>QQ;
long long iBFS,solBFS,sol;
long long BFS(int a){
  QQ.push(a);
  for(int i=0; i<=N+3; i++)posecen[i]=1e9;
  posecen[a]=0;
  while(QQ.size()){
    a=QQ.front();
    QQ.pop();
    for(int i=0; i<graf[a].size(); i++)
      if(posecen[graf[a][i]]==1e9){
        posecen[graf[a][i]]=posecen[a]+1;
        QQ.push(graf[a][i]);
      }
  }
  long long ret=0;
  for(int i=1; i<=N; i++)ret+=posecen[i]*A[i];
  return ret;
}
int main(){
  cin>>N;
  for(int i=1; i<N; i++){
    cin>>x>>y;
    graf[x].push_back(y);
    graf[y].push_back(x);
  }
  for(int i=1; i<=N; i++)cin>>A[i];
  cin>>Q;
  if(N<=1000 and Q==0){
    solBFS=1e18;
    for(int i=1; i<=N; i++){
      iBFS=BFS(i);
      if(solBFS>iBFS){
        solBFS=iBFS;
        sol=i;
      }
    }
    cout<<sol<<endl;
  }
  else{
    for(int i=1; i<=Q; i++){
      cin>>x>>y;
    }
  }
  return 0;
}