#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, q;
    cin >> n >> m >> q;
    vector<vector<int>> g(n + 1);
    for (int i = 0, u, v; i < m; i++) {
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    vector<int> fa(n + 1, 0), sz(n + 1, 0);    // 仅对已染色点生效
    vector<long long> col(n + 1, 0);           // 0 表示未染色
    function<int(int)> find = [&](int x) {
        return fa[x] == x ? x : fa[x] = find(fa[x]);
    };
    auto unite = [&](int a, int b, int& mx) {
        a = find(a);
        b = find(b);
        if (a == b) return;
        if (sz[a] < sz[b]) swap(a, b);
        fa[b] = a;
        sz[a] += sz[b];
        mx = max(mx, sz[a]);
    };

    int mx = 0;
    while (q--) {
        int u;
        long long c;
        cin >> u >> c;
        col[u] = c;
        fa[u] = u;
        sz[u] = 1;
        mx = max(mx, 1);  // 新建颜色块
        for (int v : g[u]) if (col[v] == c) unite(u, v, mx); // 仅与同色邻点合并
        cout << mx << '\n';
    }
    return 0;
}