# https://yukicoder.me/problems/no/3585 from collections import deque def main(): N, M, K = map(int, input().split()) lower = K upper = ((N - K) * (N - K - 1)) // 2 upper += (N - K) upper += K - 1 x = ((N * (N - 1)) // 2) - M if not (lower <= x <= upper): print("No") return ok_pair = set() base = 0 for i in range(K - 1): ok_pair.add((i, i + 1)) base += 1 ok_pair.add((base, N - 1)) array = deque() for i in range(base, N): for j in range(i + 1, N): if (i, j) == (base, N - 1): continue array.append((i, j)) while len(ok_pair) < x: ok_pair.add(array.popleft()) answer = set() for i in range(N): for j in range(i + 1, N): if (i, j) not in ok_pair: answer.add((i + 1, j + 1)) print("Yes") for u, v in answer: print(u, v) if __name__ == "__main__": main()