#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, t, k;
  cin >> n >> t >> k;
  vector<int> a(t + 1, 1);
  int maxpos = 0;
  for (int i = 1; i <= t; i++) {
    cin >> a[i];
    maxpos += (a[i] - 1);
  }
  maxpos++;
  int com = 0;
  for (int i = 2; i <= t; i++) com += max(0, a[i - 1] - a[i]);
  com += a[t];
  if (com > k || k > maxpos)
    cout << -1 << endl;
  else {
    int rem = k - com;
    vector<pair<int, int>> ed;
    vector<int> row;
    vector<vector<int>> vert(t + 1, row);
    vert[0].push_back(1);
    int ptr = 2;
    for (int i = 1; i <= a[1]; i++) {
      vert[1].push_back(ptr);
      ed.push_back({1, ptr});
      ptr++;
    }
    for (int i = 2; i <= t; i++) {
      int max_av = a[i - 1] - 1 - max(0, a[i - 1] - a[i]);
      if (max_av >= rem) {
        int rlim = vert[i - 1][a[i - 1] - rem - max(0, a[i - 1] - a[i]) - 1];
        int aux_ptr = vert[i - 1][0];
        for (int j = 1; j <= a[i]; j++) {
          vert[i].push_back(ptr);
          ed.push_back({aux_ptr, ptr});
          ptr++;
          aux_ptr++;
          if (aux_ptr > rlim) aux_ptr = vert[i - 1][0];
        }
        rem = 0;
      } else {
        int aux_ptr = vert[i - 1][0];
        for (int j = 1; j <= a[i]; j++) {
          vert[i].push_back(ptr);
          ed.push_back({aux_ptr, ptr});
          ptr++;
        }
        rem -= (a[i - 1] - max(0, a[i - 1] - a[i]) - 1);
      }
    }
    cout << n << endl;
    for (int i = 0; i < ed.size(); i++)
      cout << ed[i].first << " " << ed[i].second << endl;
  }
  return 0;
}
