#include <bits/stdc++.h>
using namespace std;
const int N = 200200;
const int mod = 1e9 + 7;
int cnt;
int sum;
int sz;
int n, t, k, a[N];
vector<int> v[N];
pair<int, int> edge[N];
int lvl[N];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> t >> k;
  for (int i = 1; i <= t; ++i) cin >> a[i];
  int w = k;
  a[0] = 1;
  for (int i = 1; i <= t + 1; ++i) {
    if (a[i] < a[i - 1]) {
      sum += a[i - 1] - a[i];
      int t = min(a[i - 1] - a[i], k);
      lvl[i - 1] = t;
      k -= t;
    }
  }
  if (sum > w) return cout << -1, 0;
  for (int i = 1; i <= t + 1; ++i) {
    int left = a[i] - lvl[i];
    int add = min(max(0, left - 1), k);
    k -= add;
    lvl[i] += add;
  }
  if (k) return cout << -1, 0;
  v[0].push_back(1);
  sz = 1;
  for (int i = 1; i <= t; ++i) {
    int t = 0;
    int can = a[i - 1] - lvl[i - 1];
    for (int j = 1; j <= a[i]; ++j) {
      sz++;
      edge[++cnt] = make_pair(v[i - 1][t], sz);
      t = (t + 1) % can;
      v[i].push_back(sz);
    }
  }
  cout << n << "\n";
  for (int i = 1; i <= cnt; ++i) {
    cout << edge[i].first << ' ' << edge[i].second << "\n";
  }
  return 0;
}
