import sys
from typing import List
def parse_input():
n, m, q = map(int, sys.stdin.readline().strip().split())
edges = [
list(map(int, sys.stdin.readline().strip().split()))
for _ in range(m)
]
colors = [
list(map(int, sys.stdin.readline().strip().split()))
for _ in range(q)
]
return n, edges, colors
class Solution:
def __init__(self, n, edges) -> None:
self.node_color: List[int] = [0] * n
self.neighbors = self._build_neighbors(n, edges)
self.max = 0
def _build_neighbors(self, n, edges) -> List[List[int]]:
neighbors = [[] for _ in range(n)]
for u, v in edges:
u, v = u - 1, v - 1
neighbors[u].append(v)
neighbors[v].append(u)
return neighbors
def resolve(self, turn_color) -> int:
x, c = turn_color[0] - 1, turn_color[1]
self.node_color[x] = c
visited = set()
def dfs(i) -> int:
if self.node_color[i] != c:
return 0
visited.add(i)
return 1 + sum(dfs(j) for j in self.neighbors[i] if j not in visited)
candidate_max = dfs(x)
self.max = max(self.max, candidate_max)
return self.max
# Solution维护ans,在每次染色后更新
# 初始时每个节点只和自己连通
# 如何将连通的所有节点映射到一个值?先用dfs实现吧
# node_color: list, not_visited: set
# 根据edges和colors,构建每个节点和自己颜色相同的邻居节点
# 从每个节点出发,通过dfs统计连通节点数,更新ans
if __name__ == "__main__":
n, edges, colors = parse_input()
solution = Solution(n, edges)
for color in colors:
ans = solution.resolve(color)
print(ans)