#include <bits/stdc++.h>
using namespace std;
const long long MAX = 1e6 + 8;
const long long sz = 1e5 + 5;
void f_io() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
}
long long dp[5002][5002];
int32_t main() {
  f_io();
  long long t = 1;
  while (t--) {
    long long n, k, v;
    cin >> n >> k >> v;
    vector<long long> vol(n + 1);
    long long sum = 0;
    for (long long i = 0; i < n; i++) {
      cin >> vol[i];
      sum += vol[i];
    }
    memset(dp, -1, sizeof dp);
    dp[0][0] = 1;
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < k; j++) {
        if (dp[i][j] == -1) continue;
        dp[i + 1][j] = 0;
        dp[i + 1][(j + vol[i]) % k] = 1;
      }
    }
    long long rem = v % k;
    if (sum < v || dp[n][rem] == -1) return 0 * printf("NO\n");
    sum = 0;
    vector<long long> fret[2];
    for (long long i = n; i > 0; i--) {
      if (dp[i][rem]) {
        sum += vol[i - 1];
        rem = (rem + k - (vol[i - 1]) % k) % k;
        fret[1].push_back(i - 1);
      } else
        fret[0].push_back(i - 1);
    }
    sort(fret[0].begin(), fret[0].end());
    sort(fret[1].begin(), fret[1].end());
    cout << "YES"
         << "\n";
    for (long long i = 1; i < fret[0].size(); i++)
      cout << 100000 << " " << fret[0][i] + 1 << " " << fret[0][0] + 1 << "\n";
    for (long long i = 1; i < fret[1].size(); i++)
      cout << 100000 << " " << fret[1][i] + 1 << " " << fret[1][0] + 1 << "\n";
    long long tank1, tank2;
    if (fret[0].empty())
      tank1 = fret[1][1], tank2 = fret[1][0];
    else if (fret[1].empty())
      tank1 = fret[0][0], tank2 = fret[0][1];
    else
      tank1 = fret[0][0], tank2 = fret[1][0];
    if (sum > v)
      cout << (sum - v) / k << " " << tank2 + 1 << " " << tank1 + 1 << "\n";
    else if (sum < v)
      cout << (v - sum) / k << " " << tank1 + 1 << " " << tank2 + 1 << "\n";
  }
}
