#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
using pi3 = pair<int, pii>;
int pre[5100][5100], a[5100], vst[5100];
vector<int> vec[5100];
int main() {
  int n, k, v;
  cin >> n >> k >> v;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  int sum = 0;
  for (int i = 1; i <= n; i++) sum += a[i];
  int r = v % k;
  int t = (sum - r) / k;
  if (r == 0) {
    if (sum < v) {
      puts("NO");
      return 0;
    }
    vector<pi3> ans;
    for (int i = 2; i <= n; i++) {
      int cnt = (a[i] + k - 1) / k;
      if (cnt) ans.push_back(pi3(cnt, pii(i, 1)));
    }
    int cnt = v / k;
    if (cnt) ans.push_back(pi3(cnt, pii(1, 2)));
    puts("YES");
    for (auto p : ans)
      printf("%d %d %d\n", p.first, p.second.first, p.second.second);
    return 0;
  }
  if (t * k + r < v) {
    puts("NO");
    return 0;
  }
  vec[0].push_back(0);
  for (int i = 1; i <= n; i++) {
    vector<int> tmp;
    for (int j = 0; j < k; j++) {
      int r = (j - a[i]) % k;
      r = (r + k) % k;
      if (vec[r].size()) {
        pre[i][j] = vec[r].back();
        tmp.push_back(j);
      }
    }
    for (int v : tmp) {
      vec[v].clear();
      vec[v].push_back(i);
    }
  }
  if (!vec[r].size() or !vec[r].back()) {
    puts("NO");
    return 0;
  }
  puts("YES");
  vector<pi3> ans;
  int st = vec[r].back();
  int id1 = st, sum1 = a[st];
  int R = r;
  while (st) {
    vst[st] = 1;
    int pos = pre[st][R];
    R = (R - a[st]) % k;
    R = (R + k) % k;
    if (pos > 0) {
      int cnt = (a[pos] + k - 1) / k;
      if (cnt) ans.push_back(pi3(cnt, pii(pos, id1)));
      sum1 += a[pos];
    }
    st = pos;
  }
  if (sum1 % k != r) assert(0);
  int id2 = 0, sum2 = 0;
  for (int i = 1; i <= n; i++) {
    if (!vst[i]) {
      id2 = i;
      break;
    }
  }
  for (int i = n; i >= 1; i--) {
    if (vst[i]) continue;
    sum2 += a[i];
    if (i == id2) break;
    int cnt = (a[i] + k - 1) / k;
    if (cnt) ans.push_back(pi3(cnt, pii(i, id2)));
  }
  if (sum1 == v) {
    if (ans.size() > n + 5)
      while (1)
        ;
    for (auto p : ans) {
      if (p.first == 0) assert(0);
      printf("%d %d %d\n", p.first, p.second.first, p.second.second);
    }
    return 0;
  }
  int cnt = abs(sum1 - v) / k;
  if (id2 == 0)
    for (int i = 1; i <= n; i++)
      if (i != id1) {
        id2 = i;
        break;
      };
  int sr = id1, tar = id2;
  if (sum1 < v) swap(sr, tar);
  ans.push_back(pi3(cnt, pii(sr, tar)));
  if (ans.size() > n + 5)
    while (1)
      ;
  for (auto p : ans) {
    if (p.first == 0) assert(0);
    printf("%d %d %d\n", p.first, p.second.first, p.second.second);
  }
  return 0;
}
