#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e5 + 3;
const int MOD = (int)1e9 + 7;
int n, d, h;
int nc = 2;
vector<int> g[MAXN];
vector<pair<int, int> > edges;
void nodeFill(int root, int k) {
  if (k == 0) return;
  g[root].push_back(nc++);
  edges.push_back({root, nc - 1});
  nodeFill(nc - 1, k - 1);
}
void finalFill(int root) {
  while (nc <= n) {
    edges.push_back({root, nc++});
  }
}
int main() {
  cin >> n >> d >> h;
  if (d > 2 * h) {
    cout << -1 << endl;
    return 0;
  } else if (d == 1 && n > 2) {
    cout << -1 << endl;
    return 0;
  }
  nodeFill(1, h);
  nodeFill(1, d - h);
  if (d != h)
    finalFill(1);
  else
    finalFill(nc - 2);
  for (int i = 0; i < edges.size(); i++) {
    cout << edges[i].first << " " << edges[i].second << '\n';
  }
  return 0;
}
