#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long MOD = 1e9 + 6;
const long long inf = 2e18;
const int maxn = 200005;
const int maxa = 300005;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  if (b < 0) return -1;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
long long powmod2(long long a, long long b) {
  long long res = 1;
  a %= MOD;
  if (b < 0) return -1;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % MOD;
    a = a * a % MOD;
  }
  return res;
}
const int INF = 0x3f3f3f3f;
int a[maxn];
vector<pair<int, int> > ans;
vector<int> val[maxn];
int dis[maxn];
int main() {
  ios::sync_with_stdio(0);
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 1; i <= m; i++) cin >> a[i];
  int now = 2;
  int cnt = 1;
  val[0].push_back(1);
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= a[i]; j++) {
      dis[now] = i;
      val[i].push_back(now++);
    }
    cnt += a[i] - 1;
  }
  if (k > cnt) {
    return 0 * puts("-1");
  }
  int lstpos = 0;
  int nowval = 0;
  for (int i = 2; i <= n; i++) {
    if (dis[i] > nowval) {
      nowval = dis[i];
      lstpos = 0;
    }
    if (lstpos != val[dis[i] - 1].size() && cnt > k) {
      ans.push_back({i, val[dis[i] - 1][lstpos]});
      if (lstpos != 0) {
        cnt--;
      }
      lstpos++;
    } else {
      ans.push_back({i, val[dis[i] - 1][0]});
    }
  }
  if (k != cnt) {
    return 0 * puts("-1");
  }
  cout << n << endl;
  for (auto k : ans) {
    cout << k.first << " " << k.second << endl;
  }
}
