#include <bits/stdc++.h>
using namespace std;
long long n, k, v;
int a[5050];
int dp[5050][5050], is[5050][5050];
std::vector<long long> vec;
int vis[5050];
int main() {
  cin >> n >> k >> v;
  long long sum = 0;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    sum += a[i];
  }
  dp[0][0] = 1;
  if (sum < v) {
    cout << "NO" << endl;
    return 0;
  } else {
    for (int i = 1; i <= n; i++) {
      for (int j = k - 1; j >= 0; j--) {
        if (dp[i - 1][j] == 0) continue;
        is[i][j] = 0;
        dp[i][j] = 1;
        if (dp[i - 1][(j + a[i]) % k] == 1)
          continue;
        else {
          dp[i][(j + a[i]) % k] = 1;
          is[i][(j + a[i]) % k] = 1;
        }
      }
    }
  }
  long long res = 0;
  if (dp[n][v % k] == 0) {
    cout << "NO" << endl;
    return 0;
  } else {
    cout << "YES" << endl;
    if (v == 0) {
      if (a[1] != 0) cout << (a[1] - 1) / k + 1 << ' ' << 1 << ' ' << 2 << endl;
      return 0;
    }
    long long now = v % k;
    for (int i = n; i >= 1; i--) {
      if (is[i][now] == 1) {
        vec.push_back(i);
        res += a[i];
        now = (now - a[i] + k * 100000000) % k;
        vis[i] = 1;
      }
    }
  }
  if (res >= v) {
    for (int i = 1; i < vec.size(); i++) {
      if (a[vec[i]] == 0) continue;
      cout << ((a[vec[i]] - 1) / k + 1) << ' ' << vec[i] << ' ' << vec[0]
           << endl;
    }
    if (res != v)
      cout << (res - v) / k << ' ' << vec[0] << ' ' << vec[1] << endl;
  } else {
    for (int i = 1; i < vec.size(); i++) {
      if (a[vec[i]] == 0) continue;
      cout << ((a[vec[i]] - 1) / k + 1) << ' ' << vec[i] << ' ' << vec[0]
           << endl;
    }
    int haves = (v - res) / k;
    int thiss = 0;
    long long nows = 0;
    for (int i = 1; i <= n; i++) {
      if (vis[i] == 1)
        continue;
      else {
        nows += a[i];
        if (thiss == 0)
          thiss = i;
        else {
          if (a[i] == 0) continue;
          cout << (a[i] - 1) / k + 1 << ' ' << i << ' ' << thiss << endl;
        }
      }
    }
    if (vec.size() != 0)
      cout << haves << ' ' << thiss << ' ' << vec[0] << endl;
    else {
      if (thiss != 1) {
        cout << v / k << ' ' << thiss << ' ' << thiss - 1 << endl;
      } else {
        cout << v / k << ' ' << thiss << ' ' << thiss + 1 << endl;
      }
    }
  }
  return 0;
}
