#include <bits/stdc++.h>
using namespace std;
const int N = 200 * 1000 + 3;
int n, t, k;
int a[N], p[N];
vector<int> z[N];
int main() {
  assert(cin >> n >> t >> k);
  for (int i = 0; i < t; i++) assert(cin >> a[i]);
  int szv = 0;
  z[0].push_back(szv++);
  for (int i = 0; i < t; i++)
    for (int j = 0; j < a[i]; j++) {
      z[i + 1].push_back(szv++);
      p[szv - 1] = z[i][0];
    }
  int ck = 0;
  ck += int((z[t]).size());
  for (int i = t - 1; i >= 1; i--) ck += int((z[i]).size()) - 1;
  for (int i = t; i >= 2; i--) {
    int uk = 1;
    while (ck > k && uk < int((z[i]).size()) && uk < int((z[i - 1]).size())) {
      p[z[i][uk]] = z[i - 1][uk];
      uk++;
      ck--;
    }
  }
  if (ck != k) {
    cout << -1 << endl;
    return 0;
  }
  cout << n << endl;
  for (int i = 1; i < n; i++) printf("%d %d\n", p[i] + 1, i + 1);
  return 0;
}
