#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9;
struct big {
  int x, y, z;
  void upd() {}
} aq;
int a[233333], b[233333];
vector<int> lev[2333333];
int main() {
  int n, t, k;
  cin >> n >> t >> k;
  lev[0].push_back(1);
  int previous = 2;
  int imangali = 0;
  a[0] = 1;
  for (int i = 1; i <= t; i++) {
    cin >> a[i];
  }
  for (int i = 1; i <= t; i++) {
    for (int j = 0; j < a[i]; j++) {
      lev[i].push_back(previous);
      previous++;
    }
  }
  for (int i = 1; i <= t; i++) {
    b[i] = max(a[i] - a[i + 1], 0);
    imangali += b[i];
  }
  if (imangali > k) {
    cout << "-1";
    return 0;
  }
  int bagdatabi = k - imangali;
  for (int i = 1; i < t; i++) {
    if (bagdatabi == 0) break;
    if (bagdatabi <= a[i] - b[i] - 1 + 0) {
      b[i] += bagdatabi;
      bagdatabi = 0;
    } else {
      bagdatabi -= a[i] - b[i] - 1 + 0;
      b[i] = a[i] - 1;
    }
  }
  if (bagdatabi > 0) {
    cout << "-1";
    return 0;
  }
  cout << n << endl;
  for (int i = 0; i < t; i++) {
    for (int j = a[i] - b[i]; j < a[i + 1]; j++) {
      cout << lev[i][0] << " " << lev[i + 1][j] << endl;
    }
    for (int j = 0; j < a[i] - b[i]; j++) {
      cout << lev[i][j] << " " << lev[i + 1][j] << endl;
    }
  }
  return 0;
}
