#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();
  }
}
