#include <iostream>
using namespace std;
const int N = 2e5 + 5;
int hd[N], to[N * 2], nxt[N * 2], num = 0;
void add(int x, int y) {
num++;
to[num] = y;
nxt[num] = hd[x];
hd[x] = num;
}
int c[N], fa[N], d[N];
int n, k, q;
int ans = 0;
void dfs(int x, int f) {
fa[x] = f;
if (d[x] != 0) ans++;
for (int i = hd[x]; i; i = nxt[i]) {
int v = to[i];
if (v == f) continue;
d[v] = (c[v] - c[x] + k) % k;
dfs(v, x);
}
}
int main() {
freopen("tioj_outplay.in", "r", stdin);
freopen("tioj_outplay.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k >> q;
for (int i = 1; i <= n; i++) {
cin >> c[i];
}
for (int i = 1; i <= n - 1; i++) {
int u, v;
cin >> u >> v;
add(u, v);
add(v, u);
}
d[1] = c[1];
dfs(1, 0);
// cout << ans;
while (q--) {
int w, x;
cin >> w >> x;
// int f = fa[w];
int de = (x - c[w] + k) % k;
int xi;
if (w == 1)
xi = x;
else
xi = (d[w] + de) % k;
if (d[w] == 0 && xi != 0)
ans++;
else if (d[w] != 0 && xi == 0)
ans--;
d[w] = xi;
for (int i = hd[w]; i; i = nxt[i]) {
int v = to[i];
if (v == fa[w]) continue;
xi = (d[v] - de + k) % k;
if (d[v] == 0 && xi != 0)
ans++;
else if (d[v] != 0 && xi == 0)
ans--;
d[v] = xi;
}
c[w] = x;
cout << ans << endl;
}
return 0;
}