#include <bits/stdc++.h>
using namespace std;
inline void up(int& x, int y) {
  x = x + y < 1000000007 ? x + y : x + y - 1000000007;
}
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int dp[5010], n, k, v, a[5010], ans, vv, sum, an, aa[5010];
int main() {
  scanf("%d%d%d", &n, &k, &v);
  vv = v;
  v %= k;
  memset(dp, -1, sizeof(dp));
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    aa[i] = a[i];
    sum += a[i];
    if (dp[a[i] % k] == -1) dp[a[i] % k] = i;
    for (int j = 0; j < k; j++)
      if (dp[j] != -1 && dp[(j + a[i]) % k] == -1 && dp[j] != i)
        dp[(j + a[i]) % k] = i;
  }
  if (v == 0) {
    if (sum < vv)
      puts("NO");
    else {
      puts("YES");
      for (int i = 2; i <= n; i++)
        if (a[i]) printf("%d %d %d\n", (a[i] + k - 1) / k, i, 1);
      if (vv) printf("%d 1 2", vv / k);
    }
    return 0;
  }
  if (dp[v] == -1 || sum < vv)
    puts("NO");
  else {
    puts("YES");
    while (1) {
      ans = dp[v];
      v = (v - aa[dp[v]] + 100000 * k) % k;
      if (v == 0) break;
      printf("%d %d %d\n", (a[ans] + k - 1) / k, ans, dp[v]);
      a[dp[v]] += a[ans];
      a[ans] = 0;
    }
    if (ans == 1)
      an = 2;
    else
      an = 1;
    for (int i = 1; i <= n; i++)
      if (a[i] && i != an && i != ans) {
        printf("%d %d %d\n", (a[i] + k - 1) / k, i, an);
        a[an] += a[i];
        a[i] = 0;
      }
    if (a[ans] > vv)
      printf("%d %d %d", (a[ans] - vv) / k, ans, an);
    else if (a[ans] < vv)
      printf("%d %d %d", (vv - a[ans]) / k, an, ans);
  }
  return 0;
}
