#include <bits/stdc++.h>
using namespace std;
long long pow(long long a, long long b, long long M) {
  long long t = 1;
  for (a %= M; b; b >>= 1) {
    if (b & 1) t = t * a % M;
    a = a * a % M;
  }
  return t;
}
const int N = 2e5 + 5;
vector<pair<int, int> > e;
int n, m, p, a[N], b[N], l[N], r[N];
int dfs(int i, int x) {
  if (i == m) return 0;
  for (int j = x; j <= int(x + a[i] - b[i] - 1); j++) {
    e.push_back(make_pair(j, a[i] + j));
  }
  for (int j = x + a[i] * 2 - b[i]; j <= int(x + a[i] + a[i + 1] - 1); j++)
    e.push_back(make_pair(x, j));
  dfs(i + 1, x + a[i]);
}
int main() {
  cin >> n >> m >> p;
  for (int i = 1; i <= int(m); i++) scanf("%d", &a[i]);
  for (int i = 1; i <= int(m); i++) {
    l[i] = max(a[i] - a[i + 1], 0), r[i] = a[i] - 1 + (i == m);
    l[0] += l[i];
    r[0] += r[i];
  }
  if (p < l[0] || r[0] < p) {
    puts("-1");
    return 0;
  }
  int t = p - l[0];
  for (int i = 1; i <= int(m); i++) {
    if (t > r[i] - l[i])
      t -= r[i] - l[i], b[i] = r[i];
    else
      b[i] = l[i] + t, t = 0;
  }
  cout << n << endl;
  a[0] = 1;
  dfs(0, 1);
  for (int i = 0; i <= int(((int)(e).size()) - 1); i++)
    cout << e[i].first << ' ' << e[i].second << endl;
}
