#include <bits/stdc++.h>
using namespace std;
int n, K, V, a[5010], p[5010], g[5010][5010], from[5010][5010], b[5010], sum;
bool f[5010][5010];
int Num(int x) { return x / K + bool(x % K); }
int Print(int x, int y) {
  b[x] = 1;
  if (from[x][y]) {
    if (Num(a[x])) printf("%d %d %d\n", Num(a[x]), x, from[x][y]);
    a[from[x][y]] += a[x];
    return Print(from[x][y], (y - p[x] + K) % K);
  }
  return x;
}
int main(void) {
  scanf("%d%d%d", &n, &K, &V);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    sum += a[i];
    p[i] = a[i] % K;
  }
  if (sum < V) return 0 * puts("NO");
  f[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < K; j++) {
      g[i][j] = i;
      if (f[i - 1][j]) {
        f[i][j] = 1;
        g[i][j] = g[i - 1][j];
      } else {
        if (!f[i - 1][(j - p[i] + K) % K]) continue;
        f[i][j] = 1;
        from[i][j] = g[i - 1][(j - p[i] + K) % K];
      }
    }
  if (!f[n][V % K]) return 0 * puts("NO");
  puts("YES");
  int lft = Print(g[n][V % K], V % K);
  if (!lft) {
    for (int i = 1; i < n; i++)
      if (Num(a[i]))
        printf("%d %d %d\n", Num(a[i]), i, i + 1), a[i + 1] += a[i];
    if (V) printf("%d %d %d\n", V / K, n, n - 1);
    return 0;
  }
  int rgt = 1;
  while (b[rgt]) rgt++;
  if (rgt > n)
    for (int i = 1; i <= n; i++)
      if (i != lft)
        return 0 * (a[lft] != V ? printf("%d %d %d\n", (a[lft] - V) / K, lft, i)
                                : 19260817);
  for (int i = rgt + 1; i <= n; i++) {
    if (b[i]) continue;
    if (a[rgt]) printf("%d %d %d\n", Num(a[rgt]), rgt, i);
    a[i] += a[rgt];
    rgt = i;
  }
  if (a[lft] > V)
    printf("%d %d %d\n", (a[lft] - V) / K, lft, rgt);
  else if (a[lft] < V)
    printf("%d %d %d\n", (V - a[lft]) / K, rgt, lft);
  return 0;
}
