#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
template <typename T>
using vec = vector<T>;
template <typename T>
using Prior = priority_queue<T>;
template <typename T>
using prior = priority_queue<T, vector<T>, greater<T>>;
const int INF = 1e9;
const int nINF = -1e9;
const ll llINF = 4 * 1e18;
const int MOD = 1e9 + 7;
ll& pmod(ll& a, ll b) {
  a = (a + b) % MOD;
  return a;
}
ll& pmod(ll& a, ll b, ll c) {
  a = (a + b) % c;
  return a;
}
ll& mmod(ll& a, ll b) {
  a = (a - b + MOD) % MOD;
  return a;
}
ll& mmod(ll& a, ll b, ll c) {
  a = (a - b + c) % c;
  return a;
}
ll& tmod(ll& a, ll b) {
  a = (a * b) % MOD;
  return a;
}
ll mul(ll a, ll b) { return (a * b) % MOD; }
ll mul(ll a, ll b, ll c) { return (a * b) % c; }
ll POW(ll a, ll b) {
  ll res = 1;
  do {
    if (b % 2) tmod(res, a);
    tmod(a, a);
  } while (b >>= 1);
  return res;
}
ll FAC(ll a) {
  ll res = 1;
  for (int i = 1; i <= a; i++) tmod(res, i);
  return res;
}
template <typename T1, typename T2>
ostream& operator<<(ostream& out, pair<T1, T2> a) {
  cout << a.first << ' ' << a.second;
  return out;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0);
  int n, d, t;
  cin >> n >> d >> t;
  if ((d == 1 and n != 2) or t < (d + 1) / 2)
    cout << -1;
  else {
    int tmp = 1, count = 2;
    for (int i = 0; i < t; i++) {
      cout << tmp << ' ' << count << '\n';
      tmp = count;
      count++;
    }
    tmp = 1;
    for (int i = 0; i < d - t; i++) {
      cout << tmp << ' ' << count << '\n';
      tmp = count;
      count++;
    }
    for (; count <= n; count++)
      cout << (t == d ? 2 : 1) << ' ' << count << '\n';
  }
}
