func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:102400000,102400000 )   using namespace std;   const double eps = 10e-10;   const int mod = 1000000007;   const int maxn = 300005;   const int maxm = 10005;   pair<int, int> ans[maxn];   int main() {     int n, m, a;     while (~scanf( %d%d , &n, &m)) {       priority_queue<pair<int, int> > q;       for (int i = (0); i < (n); i++)         scanf( %d , &a), q.push(make_pair(a, i + 1));       int cnt = 0;       while (!q.empty()) {         stack<pair<int, int> > st;         pair<int, int> cur = q.top();         q.pop();         while (!q.empty() && cur.first) {           pair<int, int> cc = q.top();           q.pop();           if (cc.first >= 1)             cc.first--, cur.first--,                 ans[cnt++] = make_pair(cc.second, cur.second);           if (cc.first) st.push(cc);         }         if (cur.first) break;         while (!st.empty()) q.push(st.top()), st.pop();       }       if (cnt < m / 2) {         puts( No );         continue;       }       printf( Yes n%d n , m / 2);       for (int i = (0); i < (cnt); i++)         printf( %d %d n , ans[i].first, ans[i].second);     }     return 0;   }   