#include <bits/stdc++.h>
using namespace std;
const int Maxn = 2e5 + 5;
inline int R() {
  char c;
  int sign = 1, res = 0;
  while ((c = getchar()) > '9' || c < '0')
    if (c == '-') sign = -1;
  res += c - '0';
  while ((c = getchar()) >= '0' && c <= '9') res = res * 10 + c - '0';
  return res * sign;
}
int a[Maxn], n, m, k, s[Maxn];
int main() {
  n = R();
  m = R();
  k = R();
  s[0] = a[0] = 1;
  int ans1 = 0, ans2 = 0;
  for (int i = 1; i <= m; i++) {
    a[i] = R();
    s[i] = a[i] + s[i - 1];
    if (a[i] < a[i - 1]) ans1 += a[i - 1] - a[i];
    ans2 += a[i] - 1;
  }
  ans1 += a[m];
  ans2++;
  if (ans1 > k || ans2 < k) {
    puts("-1");
    return 0;
  }
  printf("%d \n", n);
  for (int i = 1; i <= m; i++) {
    printf("%d %d\n", s[i - 1] - a[i - 1] + 1, s[i - 1] + 1);
    for (int j = 2; j <= a[i]; j++)
      if (j <= a[i - 1]) {
        if (ans1 < k) {
          printf("%d %d\n", s[i - 1] - a[i - 1] + 1, s[i - 1] + j);
          ans1++;
        } else
          printf("%d %d\n", s[i - 1] - a[i - 1] + j, s[i - 1] + j);
      } else
        printf("%d %d\n", s[i - 1] - a[i - 1] + 1, s[i - 1] + j);
  }
}
