#include <bits/stdc++.h>
using namespace std;
int n, d, h;
struct edge {
  int n1;
  int n2;
};
edge vertices[100000];
int main() {
  cin >> n >> d >> h;
  if (d > 2 * h || (h == 1 && d == 1 && n > 2))
    cout << "-1" << endl;
  else {
    int idx = 0;
    int usedNode = 1;
    for (int i = 0; i < h; i++) {
      vertices[idx++] = edge{usedNode - 1, usedNode++};
    }
    if (d > h) {
      vertices[idx++] = edge{0, usedNode++};
      for (int i = 1; i < (d - h); i++) {
        vertices[idx++] = edge{usedNode - 1, usedNode++};
      }
    }
    int start = (h > 1) ? 1 : 0;
    for (int i = h + (d - h); i < n - 1; i++) {
      vertices[idx++] = edge{start, usedNode++};
    }
    for (int i = 0; i < n - 1; i++) {
      cout << vertices[i].n1 + 1 << " " << vertices[i].n2 + 1 << endl;
    }
  }
}
