#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define fore(i, l, r) for (int i = (int)l; i <= (int)r; i++)
#define ford(i, r, l) for (int i = (int)r; i >= (int)l; i--)
const int MAXN = 412345LL;
ll T, n, m, q, dep[MAXN];
ll hand[MAXN], to[MAXN], nxt[MAXN], tot;
ll fa[MAXN][32], b[MAXN];
ll er[MAXN];
void pre()
{
er[0] = 1;
fore(i, 1, 31) er[i] = er[i - 1] * 2;
return;
}
void add(ll x, ll y)
{
tot++;
to[tot] = y;
nxt[tot] = hand[x];
hand[x] = tot;
}
ll cen(ll x, ll y)
{
if (cen < 0)
return -1;
ford(i, 31, 0)
{
if (y >= er[i])
{
y -= er[i];
x = fa[x][i];
}
}
return x;
}
ll lca(ll x, ll y)
{
if (dep[x] < dep[y])
swap(x, y);
if (dep[x] > dep[y])
{
x = cen(x, dep[y] - dep[x]);
}
if (x == y)
return x;
ford(i, 31, 0)
{
if (fa[x][i] != fa[y][i])
x = fa[x][i], y = fa[y][i];
}
fore(i, 0, 31)
{
if (fa[x][i] == fa[y][i])
return fa[x][i];
}
}
void sou(ll t)
{
fore(i, 1, 31)
fa[t][i] = fa[fa[t][i - 1]][i - 1];
for (register int i = hand[t]; i; i = nxt[i])
{
if (!fa[to[i]][0] && to[i] != 1)
{
fa[to[i]][0] = t;
dep[to[i]] = dep[t] + 1;
sou(to[i]);
}
}
return;
}
bool nei(ll tar, ll x, ll y)
{
ll cen1 = cen(x, dep[x] - dep[tar]);
ll cen2 = cen(y, dep[y] - dep[tar]);
ll lc = lca(x, y);
if ((cen1 == tar || cen2 == tar) && dep[tar] >= dep[lc])
return 1;
return 0;
}
bool vis[MAXN];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
pre();
cin >> n >> m >> q;
ll l, r;
fore(i, 1, n - 1)
{
cin >> l >> r;
add(l, r);
add(r, l);
}
dep[1] = 1;
sou(1);
fore(i, 1, m)
{
cin >> b[i];
}
ll cnt = 1;
l = 1, r = 2;
vis[l] = 1;
fore(i, 3, m)
{
if (nei(b[r], b[l], b[i]))
{
r = i;
continue;
}
l = r;
vis[l] = 1;
r = i;
cnt++;
}
// cout << cnt << endl;
if (l != n)
vis[n] = 1, cnt++;
while (q--)
{
cin >> l >> r;
if (vis[l])
{
if (l - 1 >= 1 && vis[l - 1] == 0)
vis[l - 1] = 1, cnt++;
if (l + 1 <= n && vis[l + 1] == 0)
vis[l + 1] = 1, cnt++;
if (l - 2 >= 1 && nei(b[l - 1], r, b[l - 2]))
vis[l - 1] = 0, cnt--;
if (l + 2 <= n && nei(b[l + 1], r, b[l + 2]))
vis[l + 1] = 0, cnt--;
b[l] = r;
}
else
{
vis[l] = 1;
cnt++;
if (l - 1 >= 1 && vis[l - 1] == 0)
vis[l - 1] = 1, cnt++;
if (l + 1 <= n && vis[l + 1] == 0)
vis[l + 1] = 1, cnt++;
if (l - 2 >= 1 && nei(b[l - 1], r, b[l - 2]))
vis[l - 1] = 0, cnt--;
if (l + 2 <= n && nei(b[l + 1], r, b[l + 2]))
vis[l + 1] = 0, cnt--;
if (nei(b[l - 1], r, b[l + 1]))
vis[l] = 0, cnt--;
b[l] = r;
}
cout << cnt << endl;
}
return 0;
}
/*
5 5 3
2 1
3 2
1 4
5 1
1 5 4 2 3
1 3
5 3
3 3
*/