def rr(n, k): res = [1] * (k + 1) res[1] += n - sum(res) return res n, m, k = map(int, input().split()) nns = rr(n, k) s = 0 for i in range(len(nns)): s, nns[i] = s + nns[i], s assert s == n assert len(nns) == k + 1 nns.append(n) req = n*(n-1)//2 - m adj = [[0 for j in range(n)] for i in range(n)] ne = 0 def pe(i, j): if adj[i][j]: return adj[i][j] = adj[j][i] = 1 global ne; ne += 1 def g(): for i in range(k): for u in range(nns[i], nns[i + 1]): for v in range(nns[i + 1], nns[i + 2]): yield (u, v) for i in range(k+1): for u in range(nns[i], nns[i + 1]): for v in range(u + 1, nns[i + 1]): yield (u, v) for i in range(k): pe(nns[i+1]-1, nns[i+2]-1) success = True if ne > req: success = False else: for u, v in g(): if ne >= req: break pe(u, v) if ne != req: success = False if success: print('Yes') for i in range(n): for j in range(i): if not adj[i][j]: print(j+1, i+1) else: print('No')