#include <bits/stdc++.h>
using namespace std;
set<pair<int, int>> e;
int k, n, d, llx;
void dfs(int u, int fa, int d, int siz) {
  if (u > n) return;
  e.insert({min(u, fa), max(u, fa)});
  if (d)
    for (int i = 0; i < siz && llx < n; ++i) dfs(++llx, u, d - 1, k - 1);
}
int main() {
  scanf("%d%d%d", &n, &d, &k);
  if (n <= d || d > 1 && k < 2) return puts("NO"), 0;
  for (llx = 1; llx <= d; ++llx) e.insert({llx, llx + 1});
  for (int i = 2; i <= d && llx < n; ++i)
    dfs(i, i - 1, min(i - 1, d + 1 - i), k - 2);
  if (llx < n) return 0 & puts("NO");
  puts("YES");
  for (auto i : e) printf("%d %d\n", i.first, i.second);
}
