def nC2(n): return n*(n-1)//2 def nC3(n): return n*(n-1)*(n-2)//6 N, M, K = map(int, input().split()) limit = nC2(N)-M if limit < N-1: if limit < K: print("No") else: print("Yes") A = list(range(limit+1)) A[K] = N-1 for i in range(limit): print(A[i]+1, A[i+1]+1) exit() right = N-K if nC2(right+1)+(N-1-right) < limit: print("No") else: print("Yes") ans = [] for i in range(right): for j in range(i+1, right+1): ans.append((i, j)) for i in range(right, N-1): ans.append((i, i+1)) IDX = list(range(N)) dist = [0] for _ in range(right): dist.append(1) for _ in range(N-right-1): dist.append(dist[-1]+1) for i in reversed(range(N)): if dist[i] == K: IDX[i], IDX[N-1] = IDX[N-1], IDX[i] break cnt = len(ans)-limit for a, b in ans: if (b <= right and (a, b) != (0, right)) and cnt: cnt -= 1 else: print(IDX[a]+1, IDX[b]+1)