func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 1e9 + 7;   const long long MOD = 1e9 + 6;   const long long inf = 2e18;   const int maxn = 200005;   const int maxa = 300005;   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   long long powmod(long long a, long long b) {     long long res = 1;     a %= mod;     if (b < 0) return -1;     for (; b; b >>= 1) {       if (b & 1) res = res * a % mod;       a = a * a % mod;     }     return res;   }   long long powmod2(long long a, long long b) {     long long res = 1;     a %= MOD;     if (b < 0) return -1;     for (; b; b >>= 1) {       if (b & 1) res = res * a % MOD;       a = a * a % MOD;     }     return res;   }   const int INF = 0x3f3f3f3f;   int a[maxn];   vector<pair<int, int> > ans;   vector<int> val[maxn];   int dis[maxn];   int main() {     ios::sync_with_stdio(0);     int n, m, k;     cin >> n >> m >> k;     for (int i = 1; i <= m; i++) cin >> a[i];     int now = 2;     int cnt = 1;     val[0].push_back(1);     for (int i = 1; i <= m; i++) {       for (int j = 1; j <= a[i]; j++) {         dis[now] = i;         val[i].push_back(now++);       }       cnt += a[i] - 1;     }     if (k > cnt) {       return 0 * puts( -1 );     }     int lstpos = 0;     int nowval = 0;     for (int i = 2; i <= n; i++) {       if (dis[i] > nowval) {         nowval = dis[i];         lstpos = 0;       }       if (lstpos != val[dis[i] - 1].size() && cnt > k) {         ans.push_back({i, val[dis[i] - 1][lstpos]});         if (lstpos != 0) {           cnt--;         }         lstpos++;       } else {         ans.push_back({i, val[dis[i] - 1][0]});       }     }     if (k != cnt) {       return 0 * puts( -1 );     }     cout << n << endl;     for (auto k : ans) {       cout << k.first <<     << k.second << endl;     }   }   