#include <bits/stdc++.h>   using namespace std;   const long long N = 5100;   const long long M = 15;   const long long mod = 1e9 + 7;   const long long MOD = 998244353;   const long long P = 1336;   const long double eps = 0.000000001;   const long long inf = 1e9;   mt19937 gen(chrono::high_resolution_clock::now().time_since_epoch().count());   long long w[N], b[N], a[N], dp[N], u[N];   vector<long long> nom[N];   int32_t main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     srand(time(0));     long long n, k, V;     cin >> n >> k >> V;     long long sum = 0;     if (V == 0) {       cout <<  YES  <<   n ;       cout << inf <<   1 2 ;       return 0;     }     for (long long i = 0; i < n; i++) {       cin >> w[i];       sum += w[i];       b[i] = w[i] % k;       a[i] = w[i] - b[i];       if (a[i] > V) a[i] = V / k * k;     }     if (sum < V) {       cout <<  NO ;       return 0;     }     dp[0] = 1;     for (long long i = 0; i < n; i++) {       for (long long j = k; j >= 0; j--) {         if (dp[j] != 1) continue;         long long per = (j + b[i]) % k;         if (per == 0) per = k;         if (dp[per]) continue;         dp[per] = 2;         for (auto to : nom[j]) {           nom[per].push_back(to);         }         nom[per].push_back(i);       }       for (long long j = k; j >= 0; j--) {         if (dp[j] == 2) dp[j] = 1;       }     }     for (long long i = 0; i < n; i++) {       long long need = (V - a[i]) % k;       if (need == 0) need = k;       if (!dp[need] && need != k) continue;       long long no = -1;       vector<pair<long long, pair<long long, long long> > > g;       for (long long j = 0; j < n; j++) {         u[j] = 0;       }       for (auto to : nom[need]) {         u[to] = 1;       }       if (u[i] == 0 && need != k) continue;       long long s = 0;       for (auto to : nom[need]) {         u[to] = 1;         if (to == i) {           s += w[i];           continue;         }         g.push_back({inf, {to, i}});         s += w[to];       }       long long e = -1;       for (long long j = 0; j < n; j++) {         if (u[j]) continue;         e = j;       }       if (s < V) {         need = (V - s) / k;         for (long long j = 0; j < n; j++) {           if (u[j] || j == e) continue;           long long c = w[j] / k;           if (w[j] % k) c++;           if (c) g.push_back({c, {j, e}});           w[e] += w[j];         }         long long c = w[e] / k;         if (c < need) continue;         g.push_back({need, {e, i}});       }       if (s > V) {         need = (s - V) / k;         if (i)           g.push_back({need, {i, 0}});         else           g.push_back({need, {i, 1}});       }       cout <<  YES  <<   n ;       for (auto to : g) {         cout << to.first <<     << to.second.first + 1 <<                  << to.second.second + 1 <<   n ;       }       return 0;     }     cout <<  NO ;   }   