#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int n, d, h;
vector<int> G[MAXN];
int c;
void dfs(int u, int fa, int dpt) {
  if (fa > 0) G[fa].push_back(u);
  if (dpt == 0) return;
  dfs(++c, u, dpt - 1);
}
void print(int u, int fa) {
  if (fa > 0) printf("%d %d\n", fa, u);
  for (int v : G[u]) {
    if (v == fa) continue;
    print(v, u);
  }
}
void solve() {
  if (h == d) {
    if (h == 1 && n > h + 1) return (void)puts("-1");
    for (int i = 2; i <= h; ++i) printf("%d %d\n", i - 1, i);
    for (int i = h + 1; i <= n; ++i) printf("%d %d\n", h, i);
    return;
  }
  if (!(h <= d && d <= 2 * h)) return (void)puts("-1");
  c = 1;
  dfs(1, -1, h);
  if (d - h > 0) dfs(1, -1, d - h);
  if (c > n) return (void)puts("-1");
  int F = -1;
  for (int i = 1; i <= n; ++i)
    if (G[i].size() > 1) {
      F = i;
      break;
    }
  assert(F > 0);
  while (c < n) {
    if (d == h && d == 1)
      G[1].push_back(++c);
    else
      G[F].push_back(++c);
  }
  print(1, -1);
}
int main() {
  scanf("%d%d%d", &n, &d, &h);
  solve();
  return 0;
}
