#include <bits/stdc++.h>
using namespace std;
int tmp, n, d, k;
vector<pair<int, int>> ans;
void tst(int r, int t) {
  if (tmp > n || t <= 0) return;
  if (t * 2 > d) {
    ans.push_back({r, ++tmp});
    tst(tmp, t - 1);
    if (t > 1)
      for (int i = 1; i < k; ++i) {
        if (tmp > n) return;
        ans.push_back({r, ++tmp});
        tst(tmp, t - 2);
      }
  } else {
    for (int i = 0; i < k; ++i) {
      if (tmp > n) return;
      ans.push_back({r, ++tmp});
      tst(tmp, t - 1);
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &d, &k);
  tmp = 1;
  tst(1, (d + 1) / 2);
  if (ans.size() < n - 1)
    printf("NO\n");
  else {
    printf("YES\n");
    for (int i = 0; i < n - 1; ++i)
      printf("%d %d\n", ans[i].first, ans[i].second);
  }
  return 0;
}
