#include <bits/stdc++.h>
char dp[5000][5000], used[5000];
int jj[5000][5000], aa[5000];
void update(int i, int j, int j_) { dp[i][j] = 1, jj[i][j] = j_; }
int sum;
void trace(int i, int j) {
  if (i == -1) return;
  if ((i == 0 ? 0 : jj[i][j]) != j) {
    used[i] = 1;
    sum += aa[i];
  }
  trace(i - 1, jj[i][j]);
}
int main() {
  int n, k, v, i, j, i1, i2;
  scanf("%d%d%d", &n, &k, &v);
  sum = 0;
  for (i = 0; i < n; i++) {
    scanf("%d", &aa[i]);
    sum += aa[i];
  }
  if (sum < v) {
    printf("NO\n");
    return 0;
  }
  update(0, 0, -1);
  update(0, aa[0] % k, -1);
  for (i = 0; i < n - 1; i++)
    for (j = 0; j < k; j++)
      if (dp[i][j]) {
        update(i + 1, j, j);
        update(i + 1, (j + aa[i + 1]) % k, j);
      }
  if (!dp[n - 1][v % k])
    printf("NO\n");
  else {
    int tmp, cnt;
    sum = 0;
    trace(n - 1, v % k);
    i1 = i2 = -1;
    for (i = 0; i < n; i++)
      if (used[i] && i1 == -1)
        i1 = i;
      else if (!used[i] && i2 == -1)
        i2 = i;
    printf("YES\n");
    for (i = 0; i < n; i++)
      if (i != i1 && i != i2 && aa[i] > 0)
        printf("%d %d %d\n", (aa[i] + k - 1) / k, i + 1,
               (used[i] ? i1 : i2) + 1);
    cnt = (sum - v) / k;
    if (cnt < 0) {
      cnt = -cnt;
      tmp = i1, i1 = i2, i2 = tmp;
    }
    if (cnt != 0)
      printf("%d %d %d\n", cnt, i1 + 1, (i2 == -1 ? (i1 + 1) % n : i2) + 1);
  }
  return 0;
}
