#include <bits/stdc++.h>   using namespace std;   const long long inf = 1e18 + 1e17;   const long long mod = 1e9 + 7;   long long modInverse(long long a, long long m) {     long long m0 = m;     long long y = 0, x = 1;     if (m == 1) return 0;     while (a > 1) {       long long q = a / m;       long long t = m;       m = a % m, a = t;       t = y;       y = x - q * y;       x = t;     }     if (x < 0) x += m0;     return x;   }   long long powm(long long a, long long b) {     a = a % mod;     long long res = 1;     while (b) {       if (b & 1) res = (res * a) % mod;       a = (a * a) % mod;       b >>= 1;     }     return (res % mod);   }   const long long N = 5e3 + 6;   int n, k, water;   vector<int> v;   int dp[N][2], dpr[N][2];   int arr[N];   bool brr[N];   int ip = 1e9;   void makedp() {     dp[0][0] = 1;     dp[0][1] = -1;     for (int i = 0; i < n; i++) {       int x = arr[i] % k;       memset(dpr, -1, sizeof(dpr));       dpr[0][0] = 1;       for (int j = 1; j < k; j++) {         if (dp[j][0] == 0 && dp[(j - x + k) % k][0] == 1) {           dpr[j][0] = 1;           dpr[j][1] = i;         } else {           dpr[j][0] = dp[j][0];           dpr[j][1] = dp[j][1];         }       }       swap(dpr, dp);     }   }   bool check() {     int tt = 0;     for (int i = 0; i < n; i++) tt += arr[i];     if (tt < water || dp[water % k][0] == 0) {       cout <<  NO n ;       return true;       ;     }     return false;   }   void find() {     int val = water % k;     int x = dp[val][1];     while (x != -1) {       v.push_back(dp[val][1]);       val = (val - arr[x] % k + k) % k;       x = dp[val][1];     }   }   void seperate() {     memset(brr, 0, sizeof(brr));     int tt = 0;     for (int i : v) {       brr[i] = 1;       tt += arr[i];     }     for (int i = 1; i < v.size(); i++)       cout << ip <<     << v[i] + 1 <<     << v[0] + 1 <<   n ;     int mark = -1;     int tc = 0;     for (int i = 0; i < n; i++)       if (!brr[i]) {         mark = i;         tc += arr[i];       }     for (int i = 0; i < n; i++)       if (!brr[i] && mark != i)         cout << ip <<     << i + 1 <<     << mark + 1 <<   n ;     if (v.size() == 0) v.push_back(0);     if (tt > water)       cout << (tt - water) / k <<     << v[0] + 1 <<     << (0 == v[0] ? 2 : 1)            <<   n ;     else if (tt < water)       cout << (water - tt) / k <<     << mark + 1 <<     << v[0] + 1 <<   n ;   }   void solve() {     cin >> n >> k >> water;     for (int i = 0; i < n; i++) cin >> arr[i];     makedp();     if (check()) return;     cout <<  YES n ;     find();     seperate();   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     long long t = 1;     for (long long i = 1; i <= t; i++) {       solve();     }   }   