#include <iostream>
using namespace std;

long long int PrintMinOptIndeks(int brojBanaka, long long int* vrednosti, long long int** graf)
{
   long long int minVrednost = -1;
   long long int minOptIndeks = -1;

    for (long long int i = 0; i < brojBanaka; i++)
    {
        long long int pom = 0;
        for (long long int j = 0; j < brojBanaka; j++)
        {
            pom += vrednosti[j] * graf[i][j];
        }

        if (minVrednost < 0 || minVrednost > pom)
        {
            minVrednost = pom;
            minOptIndeks = i;
        }
    }

    return minOptIndeks + 1;
}

int main()
{
    long long int brojBanaka = 0;

    cin >> brojBanaka;

    long long int** graf;

    graf = new long long int* [brojBanaka];

    for (long long int i = 0; i < brojBanaka; i++)
    {
        graf[i] = new long long int[brojBanaka];
    }
    for (long long int i = 0; i <brojBanaka; i++)
        for (long long int j = 0; j < brojBanaka; j++)
        {
            if (i == j)
                graf[i][j] = 0;
            else
                graf[i][j] = 2 * brojBanaka; //INF
        }

    //for (int i = 0; i < brojBanaka; i++)
    //{
    //    for (int j = 0; j < brojBanaka; j++)
    //    {
    //        cout << graf[i][j] << " ";
    //    }
    //    cout << endl;
    //}

    for (long long int k = 0; k < brojBanaka - 1; k++)
    {
        long long int start, end;
        cin >> start >> end;

        graf[start - 1][end - 1] = 1;
        graf[end - 1][start - 1] = 1;

        //for (int i = 0; i < brojBanaka; i++)
        //{
        //    for (int j = 0; j < brojBanaka; j++)
        //    {
        //        cout << graf[i][j] << " ";
        //    }
        //    cout << endl;
        //}
    }

    //cout << endl;

    for (long long int k = 0; k < brojBanaka; k++)
    {
        for (long long int i = 0; i < brojBanaka; i++)
        {
            for (long long int j = 0; j < brojBanaka; j++)
            {
                if (graf[i][k] + graf[k][j] < graf[i][j])
                    graf[i][j] = graf[i][k] + graf[k][j];
            }
        }
    }

    //for (int i = 0; i < brojBanaka; i++)
    //{
    //    for (int j = 0; j < brojBanaka; j++)
    //    {
    //        cout << graf[i][j] << " ";
    //    }
    //    cout << endl;
    //}

    long long int* vrednosti;

    vrednosti = new long long int[brojBanaka];

    for (long long int i = 0; i < brojBanaka; i++)
    {
        cin >> vrednosti[i];
    }

    //for (int j = 0; j < brojBanaka; j++)
    //{
    //    cout << vrednosti[j] << " ";
    //}

    //cout << endl;

    long long int Q;

    cin >> Q
;

    long long int* output = new long long int[Q + 1];

    output[0] = PrintMinOptIndeks(brojBanaka, vrednosti, graf);

    for (long long int i = 0; i < Q; i++)
    {
        long long int dodatnaVrednost, banka;

        cin >> dodatnaVrednost >> banka;

        vrednosti[banka - 1] += dodatnaVrednost;

        output[i+1] = PrintMinOptIndeks(brojBanaka, vrednosti, graf);
    }

    for (long long int i = 0; i < Q + 1; i++)
        cout << output[i]<<endl;

	return 0;
}