#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
using namespace std;
int N, K, V;
int a[5005], x[5005];
int dp[5005][5005];
bool vis[5005];
long long ceil(long long x, int n) {
  if (x % n == 0)
    return x / n;
  else
    return x / n + 1;
}
int main() {
  cin >> N >> K >> V;
  int sum = 0;
  for (int i = 1; i <= N; i++) {
    cin >> a[i];
    x[i] = a[i] % K;
    sum += a[i];
  }
  if (sum < V) {
    cout << "NO" << endl;
    return 0;
  }
  if (V % K == 0) {
    cout << "YES" << endl;
    for (int i = 2; i <= N; i++) {
      if (ceil(a[i], K)) cout << ceil(a[i], K) << " " << i << " " << 1 << endl;
    }
    if (V / K) cout << V / K << " " << 1 << " " << 2 << endl;
    return 0;
  }
  dp[0][0] = 1;
  for (int i = 1; i <= N; i++) {
    for (int j = 0; j < K; j++) {
      dp[i][j] = dp[i - 1][j];
      dp[i][j] |= dp[i - 1][(j - x[i] + K) % K];
    }
  }
  if (!dp[N][V % K]) {
    cout << "NO" << endl;
    return 0;
  }
  int j = V % K, id0 = 0, id1 = 0;
  for (int i = N; i >= 1; i--) {
    if (dp[i - 1][(j - x[i] + K) % K]) {
      vis[i] = 1;
      id0 = i;
      j = (j - x[i] + K) % K;
    } else {
      id1 = i;
    }
  }
  cout << "YES" << endl;
  for (int i = 1; i <= N; i++) {
    if (i == id0 || i == id1) continue;
    if (vis[i]) {
      a[id0] += a[i];
      if (ceil(a[i], K))
        cout << ceil(a[i], K) << " " << i << " " << id0 << endl;
      if (id1 == 0) id1 = i;
    } else {
      a[id1] += a[i];
      if (ceil(a[i], K))
        cout << ceil(a[i], K) << " " << i << " " << id1 << endl;
    }
  }
  if (a[id0] < V) {
    cout << (V - a[id0]) / K << " " << id1 << " " << id0 << endl;
  } else if (a[id0] > V) {
    cout << (a[id0] - V) / K << " " << id0 << " " << id1 << endl;
  }
  return 0;
}
