#include <bits/stdc++.h>
using namespace std;
int a[5010], b[5010], c[5010][5010];
int main() {
  long long sum = 0;
  int n, k, v;
  scanf("%d%d%d", &n, &k, &v);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    sum += a[i];
  }
  if (sum < v) {
    printf("NO\n");
  } else if (sum == v || !v) {
    printf("YES\n");
    for (int i = 2; i <= n; i++) {
      if ((1 + (a[i] - 1) / k) > 0) printf("%d %d 1\n", 1 + (a[i] - 1) / k, i);
    }
  } else if (v % k == 0) {
    printf("YES\n");
    for (int i = 2; i <= n; i++) {
      printf("%d %d 1\n", 1 + (a[i] - 1) / k, i);
    }
    printf("%d %d %d\n", v / k, 1, 2);
  } else {
    int m = v % k;
    memset(c, 0, sizeof(c));
    memset(b, 0, sizeof(b));
    c[0][0] = 1;
    int tem;
    for (int i = 1; i <= n; i++) {
      tem = a[i] % k;
      for (int j = 0; j < k; j++) {
        if (c[i - 1][j]) {
          c[i][j] = 1;
          if (!c[i][(j + tem) % k]) {
            c[i][(j + tem) % k] = 2;
          }
        }
      }
    }
    if (!c[n][m]) {
      printf("NO\n");
    } else {
      printf("YES\n");
      tem = m;
      for (int i = n; i > 0; i--) {
        if (c[i][tem] == 2) {
          b[i] = 1;
          tem = (k + tem - (a[i] % k)) % k;
          if (tem == 0) break;
        }
      }
      int i = n;
      for (; !b[i]; i--)
        ;
      int st = i--;
      for (; i > 0; i--) {
        if (b[i] == 1) {
          printf("%d %d %d\n", 1 + (a[i] - 1) / k, i, st);
          a[st] += a[i];
        }
      }
      if (a[st] < v) {
        for (i = 1; b[i]; i++)
          ;
        int os = i++;
        for (; i <= n; i++) {
          if (!b[i]) {
            printf("%d %d %d\n", 1 + (a[i] - 1) / k, i, os);
          }
        }
        printf("%d %d %d\n", (v - a[st]) / k, os, st);
      } else if (a[st] > v) {
        if (st == 1)
          printf("%d %d %d\n", (a[st] - v) / k, st, 2);
        else
          printf("%d %d %d\n", (a[st] - v) / k, st, 1);
      }
    }
  }
  return 0;
}
