#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 15;
int a[N], b[N], x[N], t, k, n;
vector<int> h[N];
int main() {
  int v, i, y, maxi = 0, mini = 0, u, q;
  scanf("%d%d%d", &n, &t, &k);
  for (i = 1; i <= t; ++i) scanf("%d", &x[i]);
  maxi += x[t], mini += x[t];
  for (i = 1; i < t; ++i) maxi += x[i] - 1;
  for (i = 1; i < t; ++i) mini += max(0, x[i] - x[i + 1]);
  if (mini > k || maxi < k) {
    printf("-1\n");
    return 0;
  }
  int pos = 2, need, num = 0, lim, z = 0, cur = mini;
  for (i = 0; i < x[1]; ++i)
    a[num] = 1, b[num] = pos, h[1].push_back(pos++), ++num;
  for (i = 2; i <= t; ++i) {
    cur -= max(0, x[i - 1] - x[i]);
    need = min(x[i - 1] - 1, k - cur);
    cur += need;
    need = x[i - 1] - need;
    y = 0;
    u = x[i];
    while (u) {
      v = h[i - 1][y];
      a[num] = v, b[num] = pos, h[i].push_back(pos++), ++num;
      y = (y + 1) % need;
      --u;
    }
  }
  cout << n << endl;
  for (i = 0; i < n - 1; ++i) printf("%d %d\n", a[i], b[i]);
}
