#include <bits/stdc++.h>
using namespace std;
int n, d, k, x;
vector<int> v1, v2;
void add(int u, int v) {
  v1.push_back(u);
  v2.push_back(v);
}
void dfs(int u, int du, int cs) {
  if (cs) {
    while (du--) {
      if (x >= n) return;
      x++;
      add(u, x);
      dfs(x, k - 1, cs - 1);
    }
  }
}
int main() {
  scanf("%d %d %d", &n, &d, &k);
  x = 1;
  if (n == 1 || d >= n) {
    puts("NO");
    return 0;
  }
  int dd = d / 2;
  if (d % 2 == 1) {
    int tmp = n / 2 - 1;
    add(1, 2);
    x = 2;
    n -= tmp;
    dfs(1, k - 1, dd);
    n += tmp;
    dfs(2, k - 1, dd);
  } else {
    int tmp = n / 2;
    n -= tmp;
    dfs(1, k / 2, dd);
    n += tmp;
    dfs(1, k - k / 2, dd);
  }
  if (x < n) {
    puts("NO");
    return 0;
  }
  puts("YES");
  for (int i = 0; i < n - 1; i++) {
    printf("%d %d\n", v1[i], v2[i]);
  }
  return 0;
}
