N, M, K = (int(x) for x in input().split()) m = N * (N - 1) // 2 - M if K == 1: if M == N * (N - 1) // 2: print("No") exit() print("Yes") if M == 0: exit() edges = {(i, j) for i in range(1, N) for j in range(i + 1, N + 1)} edges.discard((1, N)) while len(edges) + 1 > m: print(*edges.pop()) exit() n = N - K low = K high = n * 2 + n * (n - 1) // 2 + K - 2 if not (low <= m <= high): print("No") exit() print("Yes") edges = set() r = 2 if N > 3 else 3 for i in range(K, N): edges.add((1, i)) edges.add((r, i)) for j in range(i + 1, N): edges.add((i, j)) edges.discard((1, K)) edges.discard((r, K)) while len(edges) + K > m: edges.pop() edges.add((1, K)) edges.add((r, K)) for i in range(r, K): edges.add((i, i + 1)) if r != N: edges.add((K - 1, N)) for i in range(1, N): for j in range(i + 1, N + 1): if (i, j) not in edges and (j, i) not in edges: print(i, j)