import sys input = sys.stdin.readline sys.setrecursionlimit(10 ** 7) INF = float("INF") MOD = 10 ** 9 + 7 MOD2 = 998244353 from heapq import heappop, heappush import math from collections import Counter, deque from itertools import accumulate, combinations, combinations_with_replacement, permutations from bisect import bisect_left, bisect_right import decimal n, m, q = map(int, input().split()) edge = [[] for _ in range(n)] for i in range(m): u, v = map(int, input().split()) u, v = u - 1, v - 1 edge[u].append(v) edge[v].append(u) # 単純に橋となる辺を返す def bridge(G, N): result = set() label = [None]*N gen = 0 cost = [0]*N def dfs(u, p): nonlocal gen res = 0 for v in G[u]: if v == p: continue if label[v] is not None: if label[v] < label[u]: cost[v] += 1 res += 1 else: label[v] = gen; gen += 1 r = dfs(v, u) if r == 0: result.add((u, v) if u < v else (v, u)) res += r res -= cost[u] return res for v in range(N): if not label[v]: label[v] = gen; gen += 1 r = dfs(v, -1) assert r == 0, r return result ret = bridge(edge, n) edge2 = [[] for _ in range(n)] for u, v in ret: edge2[u].append(v) edge2[v].append(u) seen = [-1] * n for i in range(n): if seen[i] != -1: continue seen[i] = i que = deque() que.append(i) while que: x = que.popleft() for to in edge2[x]: if seen[to] != -1: continue seen[to] = seen[x] que.append(to) for i in range(q): x, y = map(int, input().split()) x, y = x - 1, y - 1 if seen[x] != seen[y]: print("No") else: print("Yes")