#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 1;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, t, k;
  cin >> n >> t >> k;
  vector<int> a(t);
  int cur_k = 0;
  int temp;
  int prev = 0;
  for (int i = 0; i < t; ++i) {
    cin >> temp;
    a[i] = temp;
    if (prev < temp) cur_k += temp - prev;
    prev = temp;
  }
  if (cur_k > k) {
    cout << -1;
    return 0;
  }
  stringstream ss;
  ss << n << '\n';
  int max_v_ind = 1;
  for (int i = 0; i < a[0]; ++i) {
    max_v_ind++;
    ss << 1 << ' ' << max_v_ind << '\n';
  }
  int cur_v_ind = 1;
  int max_cur_v_ind = max_v_ind;
  int layer_k, prev_layer_w = a[0];
  for (int i = 1; i < t; ++i) {
    int j = 0;
    int t_k = 1;
    if (a[i] > a[i - 1]) t_k += a[i] - a[i - 1];
    if (cur_k < k) cur_v_ind++;
    for (; j < a[i] && cur_k < k; ++j) {
      max_v_ind++;
      ss << cur_v_ind << ' ' << max_v_ind << '\n';
      if (t_k > 0)
        t_k--;
      else
        cur_k++;
    }
    for (; j < a[i]; ++j) {
      if (cur_v_ind < max_cur_v_ind) cur_v_ind++;
      max_v_ind++;
      ss << cur_v_ind << ' ' << max_v_ind << '\n';
    }
    cur_v_ind = max_cur_v_ind;
    max_cur_v_ind = max_v_ind;
  }
  if (cur_k < k)
    cout << -1;
  else
    cout << ss.str();
  return 0;
}
