#include <bits/stdc++.h>
using namespace std;
long long n, t, k, a[200005], first[200005], sz, ans, dep[200005];
vector<long long> g[200005], v[200005];
void build() {
  for (int i = 0; i <= t; i++) {
    long long sash = a[i + 1] / a[i];
    sz = 0;
    for (int j = 0; j < v[i].size(); j++) {
      for (int l = 1; l <= sash; l++) {
        g[v[i][j]].push_back(v[i + 1][sz]);
        sz++;
      }
    }
    sash = a[i + 1] - sash * a[i];
    for (int j = 0; j < sash; j++) {
      g[v[i][j]].push_back(v[i + 1][sz]);
      sz++;
    }
  }
}
int main() {
  cin >> n >> t >> k;
  a[0] = 1;
  v[0].push_back(1);
  first[0] = 1;
  dep[1] = 0;
  sz = 2;
  for (int i = 1; i <= t; i++) {
    cin >> a[i];
    first[i] = sz;
    for (int j = 1; j <= a[i]; j++) {
      dep[sz] = i;
      v[i].push_back(sz);
      sz++;
    }
  }
  build();
  for (int i = 1; i <= n; i++) {
    if (g[i].size() == 0) {
      ans++;
    }
  }
  if (k < ans) {
    cout << "-1";
    return 0;
  }
  long long raod = k - ans;
  while (raod != 0 && sz < n) {
    if (first[dep[sz]] == sz) {
      sz++;
      continue;
    }
    if (g[sz].size() > 0) {
      raod--;
      for (int i = 0; i < g[sz].size(); i++) {
        g[first[dep[sz]]].push_back(g[sz][i]);
      }
      g[sz].clear();
    }
    sz++;
  }
  if (raod == 0) {
    cout << n << endl;
    for (int i = 1; i <= n; i++) {
      for (int j = 0; j < g[i].size(); j++) {
        cout << i << " " << g[i][j] << endl;
      }
    }
    return 0;
  }
  cout << "-1";
  return 0;
}
