#include <bits/stdc++.h>
using namespace std;
int a[200005], b[200005] = {0};
vector<int> par, vec;
int main() {
  int cases, caseno = 0, n, i, j, k, cnt, t;
  scanf("%d %d %d", &n, &t, &k);
  for (i = 1; i <= t; i++) scanf("%d", &a[i]);
  int leaf = a[t];
  for (i = 2; i <= t; i++) {
    b[i - 1] = max(0, a[i - 1] - a[i]);
    leaf += b[i - 1];
  }
  b[t] = a[t];
  if (leaf > k) {
    printf("-1\n");
    return 0;
  }
  for (i = 1; i <= t - 1; i++) {
    if (leaf >= k) break;
    if (a[i] == 0) continue;
    j = min(k - leaf, a[i] - b[i] - 1);
    b[i] += j;
    leaf += j;
  }
  if (leaf != k) {
    printf("-1\n");
    return 0;
  }
  printf("%d\n", n);
  par.push_back(1);
  int sz = 2;
  int x, y, u, v;
  for (i = 1; i <= t; i++) {
    vec.clear();
    x = par.size();
    j = 0;
    for (y = 1; y <= a[i]; y++) {
      u = par[j];
      v = sz++;
      printf("%d %d\n", u, v);
      if (j < x - 1) j++;
      if (y <= a[i] - b[i]) vec.push_back(v);
    }
    par.clear();
    x = vec.size();
    for (y = 0; y <= x - 1; y++) par.push_back(vec[y]);
  }
  return 0;
}
