func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 0x20202020;   const int mod = 1000000007;   inline void read(int &x) {     char ch;     bool f = 0;     int a = 0;     while (!((((ch = getchar()) >=  0 ) && (ch <=  9 )) || (ch ==  - )))       ;     if (ch !=  - )       a *= 10, a += ch -  0 ;     else       f = 1;     while (((ch = getchar()) >=  0 ) && (ch <=  9 )) a *= 10, a += ch -  0 ;     if (f) a = -a;     x = a;   }   const int DX[] = {1, 0, -1, 0}, DY[] = {0, 1, 0, -1};   long long powmod(long long a, long long b) {     long long res = 1;     a %= mod;     for (; b; b >>= 1) {       if (b & 1) res = res * a % mod;       a = a * a % mod;     }     return res;   }   long long powmod(long long a, long long b, long long mod) {     long long res = 1;     a %= mod;     for (; b; b >>= 1) {       if (b & 1) res = res * a % mod;       a = a * a % mod;     }     return res;   }   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   const int N = 111111, M = 111111;   int l, m, n, t, tot;   struct zcc {     int x, v;   } a[N];   inline bool cmp(const zcc &a, const zcc &b) { return a.v < b.v; }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; ++i) scanf( %d , &a[i].v), a[i].x = i, tot += a[i].v;     sort(a + 1, a + 1 + n, cmp);     if (n == 1 && m == tot) {       puts( Yes );       for (int i = 1; i <= 2 * a[1].v - 1; ++i) printf( %d  , a[1].x);       printf( %d n , a[1].x);     } else if (n >= 2 && m >= 2 && m <= tot) {       puts( Yes );       while (m > 2) {         if (a[1].v > 1)           a[1].v--, printf( %d %d  , a[1].x, a[1].x), m--;         else if (a[n].v)           a[n].v--, printf( %d %d  , a[n].x, a[n].x), m--;         else           n--;       }       if (a[2].v) {         a[2].v--;         a[1].v--;         printf( %d  , a[1].x);         for (int i = 2; i <= n; ++i)           for (int j = 1; j <= a[i].v; ++j) printf( %d %d  , a[i].x, a[i].x);         printf( %d  , a[1].x);         printf( %d  , a[2].x);         for (int i = 1; i <= a[1].v; ++i) printf( %d %d  , a[1].x, a[1].x);         printf( %d n , a[2].x);       } else {         printf( %d %d n , a[1].x, a[1].x);       }     } else if (n >= 2 && m == 1 && a[1].v == 1) {       puts( Yes );       printf( %d  , a[1].x);       for (int i = 2; i <= n; ++i)         for (int j = 1; j <= a[i].v; ++j) printf( %d %d  , a[i].x, a[i].x);       printf( %d n , a[1].x);     } else       puts( No );     return 0;   }   