#include <iostream>
#include <cstring>
using namespace std;
int* addtown(int * seed, int x, int* path, int pathn)
{
int canadd = 0;
for (int i = 0; i < pathn; i++)
{
for (int j = 1; j <= seed[0]; j++)
{
if (path[i*2] == seed[j] && path[i*2+1] == x)
{ canadd = 1; break; }
if (path[i*2+1] == seed[j] && path[i*2] == x)
{ canadd = 1; break; }
}
if (canadd) break;
}
if (!canadd) return NULL;
int *p = new int[seed[0] + 2];
memcpy(p, seed, sizeof(int) * (seed[0] + 1));
p[0]++;
p[p[0] - 1] = x;
}
int profit(int * seed)
{
if (seed[0] == 1) return 0;
int max, min;
max = min = seed[1];
for (int i = 2; i <= seed[0]; i++)
{
if (max < seed[i]) max = seed[i];
if (min > seed[i]) min = seed[i];
}
return max - min;
}
int notin(int ** seed, int seedn, int x)
{
for (int i = 0; i < seedn; i++)
{
for (int j = 1; j <= seed[i][0]; j++)
if (seed[i][j] == x) return 0;
}
return 1;
}
int solve(int ** seed, int selectedn, int n, int mn, int* routes)
{
if (selectedn == n)
{
int sum = 0;
for (int i = 0; i < mn; i++)
{
sum += profit(seed[i]);
}
return sum;
}
int max = -1;
for (int i = 0; i < n; i++)
{
if (notin(seed, mn, i))
{
for (int j = 0; j < mn; j++)
{
int * seed1 = addtown(seed[j], i, routes, n - 1);
if (seed1)
{
int maxsub = solve(seed, selectedn + 1, n, mn, routes);
if (max < maxsub) max = maxsub;
}
}
}
}
return max;
}
int main() {
int townsn;
cin >> townsn;
int* towns = new int[townsn];
for (int i = 0; i < townsn; i++)
cin >> towns[i];
int* routes = new int[(townsn - 1) * 2];
for (int i = 0; i < townsn - 1; i++)
{
int x, y;
cin >> x >> y;
routes[i*2] = x - 1;
routes[i*2+1] = y - 1;
}
int k;
cin >> k;
int* mchs = new int[k];
int ** seed = new int*[k];
for (int i = 0; i < k; i++)
{
int x;
cin >> x;
mchs[i] = x - 1;
seed[i] = new int[2];
seed[i][0] = 1;
seed[i][1] = x - 1;
}
int result = solve(seed, k, townsn, k, routes);
cout << result << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCogYWRkdG93bihpbnQgKiBzZWVkLCBpbnQgeCwgaW50KiBwYXRoLCBpbnQgcGF0aG4pCnsKCWludCBjYW5hZGQgPSAwOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRobjsgaSsrKQoJewoJCWZvciAoaW50IGogPSAxOyBqIDw9IHNlZWRbMF07IGorKykKCQl7CgkJCWlmIChwYXRoW2kqMl0gPT0gc2VlZFtqXSAmJiBwYXRoW2kqMisxXSA9PSB4KQoJCQl7CWNhbmFkZCA9IDE7IGJyZWFrOwl9CgkJCWlmIChwYXRoW2kqMisxXSA9PSBzZWVkW2pdICYmIHBhdGhbaSoyXSA9PSB4KQoJCQl7CWNhbmFkZCA9IDE7IGJyZWFrOwl9CQkJCgkJfQoJCWlmIChjYW5hZGQpIGJyZWFrOwoJfQoJaWYgICghY2FuYWRkKSByZXR1cm4gTlVMTDsKCWludCAqcCA9IG5ldyBpbnRbc2VlZFswXSArIDJdOwoJbWVtY3B5KHAsIHNlZWQsIHNpemVvZihpbnQpICogKHNlZWRbMF0gKyAxKSk7CglwWzBdKys7CglwW3BbMF0gLSAxXSA9IHg7Cn0KCmludCBwcm9maXQoaW50ICogc2VlZCkKewoJaWYgKHNlZWRbMF0gPT0gMSkgcmV0dXJuIDA7CglpbnQgbWF4LCBtaW47CgltYXggPSBtaW4gPSBzZWVkWzFdOwoJZm9yIChpbnQgaSA9IDI7IGkgPD0gc2VlZFswXTsgaSsrKQoJewoJCWlmIChtYXggPCBzZWVkW2ldKSBtYXggPSBzZWVkW2ldOwoJCWlmIChtaW4gPiBzZWVkW2ldKSBtaW4gPSBzZWVkW2ldOwoJfQoJcmV0dXJuIG1heCAtIG1pbjsKfQoKaW50IG5vdGluKGludCAqKiBzZWVkLCBpbnQgc2VlZG4sIGludCB4KQp7Cglmb3IgKGludCBpID0gMDsgaSA8IHNlZWRuOyBpKyspCgl7CgkJZm9yIChpbnQgaiA9IDE7IGogPD0gc2VlZFtpXVswXTsgaisrKQoJCQlpZiAoc2VlZFtpXVtqXSA9PSB4KSByZXR1cm4gMDsKCX0KCXJldHVybiAxOwp9CgppbnQgc29sdmUoaW50ICoqIHNlZWQsIGludCBzZWxlY3RlZG4sIGludCBuLCBpbnQgbW4sIGludCogcm91dGVzKQp7CglpZiAoc2VsZWN0ZWRuID09IG4pCgl7CgkJaW50IHN1bSA9IDA7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBtbjsgaSsrKQoJCXsKCQkJc3VtICs9IHByb2ZpdChzZWVkW2ldKTsKCQl9CgkJcmV0dXJuIHN1bTsKCX0KCWludCBtYXggPSAtMTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJewoJCWlmIChub3RpbihzZWVkLCBtbiwgaSkpCgkJewoJCQlmb3IgKGludCBqID0gMDsgaiA8IG1uOyBqKyspCgkJCXsKCQkJCWludCAqIHNlZWQxID0gYWRkdG93bihzZWVkW2pdLCBpLCByb3V0ZXMsIG4gLSAxKTsKCQkJCWlmIChzZWVkMSkKCQkJCXsKCQkJCQlpbnQgbWF4c3ViID0gc29sdmUoc2VlZCwgc2VsZWN0ZWRuICsgMSwgbiwgbW4sIHJvdXRlcyk7CgkJCQkJaWYgKG1heCA8IG1heHN1YikgbWF4ID0gbWF4c3ViOwoJCQkJfQoJCQl9CgkJfQoJfQoJcmV0dXJuIG1heDsKfQoKaW50IG1haW4oKSB7CglpbnQgdG93bnNuOwoJY2luID4+IHRvd25zbjsKCWludCogdG93bnMgPSBuZXcgaW50W3Rvd25zbl07Cglmb3IgKGludCBpID0gMDsgaSA8IHRvd25zbjsgaSsrKQoJCWNpbiA+PiB0b3duc1tpXTsKCWludCogcm91dGVzID0gbmV3IGludFsodG93bnNuIC0gMSkgKiAyXTsKCWZvciAoaW50IGkgPSAwOyBpIDwgdG93bnNuIC0gMTsgaSsrKQoJewoJCWludCB4LCB5OwoJCWNpbiA+PiB4ID4+IHk7CgkJcm91dGVzW2kqMl0gPSB4IC0gMTsKCQlyb3V0ZXNbaSoyKzFdID0geSAtIDE7Cgl9CglpbnQgazsKCWNpbiA+PiBrOwoJaW50KiBtY2hzID0gbmV3IGludFtrXTsKCWludCAqKiBzZWVkID0gbmV3IGludCpba107Cglmb3IgKGludCBpID0gMDsgaSA8IGs7IGkrKykKCXsKCQlpbnQgeDsKCQljaW4gPj4geDsKCQltY2hzW2ldID0geCAtIDE7CgkJc2VlZFtpXSA9IG5ldyBpbnRbMl07CgkJc2VlZFtpXVswXSA9IDE7CgkJc2VlZFtpXVsxXSA9IHggLSAxOwoJfQoJaW50IHJlc3VsdCA9IHNvbHZlKHNlZWQsIGssIHRvd25zbiwgaywgcm91dGVzKTsKCWNvdXQgPDwgcmVzdWx0IDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==