#include <bits/stdc++.h>
using namespace std;
int const inf = 1000 * 1000 * 1000;
unsigned long long const inf64 = 1ll * inf * inf;
int const N = 200005;
int n, t, k;
int a[N];
int b[N];
pair<int, int> id[N];
int main() {
  scanf("%d %d %d", &n, &t, &k);
  for (int i = 1; i <= t; i++) scanf("%d", &a[i]);
  a[0] = 1;
  if (k < a[t]) {
    puts("-1");
    return 0;
  } else {
    k -= a[t];
  }
  for (int tmp = 0, i = 0; i <= t; i++) {
    id[i] = make_pair(tmp + 1, tmp + a[i]);
    tmp += a[i];
  }
  int mn = 0;
  int mx = 0;
  for (int i = 1; i <= t; i++) {
    mn += b[i] = max(0, a[i - 1] - a[i]);
    mx += a[i - 1] - 1;
  }
  for (int i = t - 1; i >= 1; i--) {
    b[i] += b[i + 1];
  }
  if (mn > k || mx < k) {
    puts("-1");
    return 0;
  }
  vector<pair<int, int> > edge;
  for (int cur = 0, i = 1; i <= t; i++) {
    int x = min(k - (i < t ? b[i + 1] : 0) - cur, a[i - 1] - 1);
    x = max(x, 0);
    int ql, qr;
    tie(ql, qr) = id[i - 1];
    int ql2, qr2;
    tie(ql2, qr2) = id[i];
    int len = qr - ql + 1 - x;
    int len2 = qr2 - ql2 + 1;
    for (int j = 0; j < len; j++) {
      edge.push_back(make_pair(ql + j, ql2 + j));
    }
    for (int j = len; j < len2; j++) {
      edge.push_back(make_pair(ql, ql2 + j));
    }
    cur += x;
  }
  printf("%d\n", n);
  for (pair<int, int> i : edge) {
    printf("%d %d\n", i.first, i.second);
  }
  return 0;
}
