#include <bits/stdc++.h>
int N, M, D;
using namespace std;
template <class T>
void readVectFrom1(vector<T>& v, int N) {
  v.resize(N + 1);
  v[0] = -1;
  int iv = 1;
  for (iv = 1; iv < N + 1; ++iv) {
    cin >> v[iv];
  }
}
using ll = long long;
using long_boi = ll;
vector<int> c;
void sol() {
  int earth = accumulate(c.begin(), c.end(), 1);
  int water = N - earth;
  if ((D == 1 && water != 0)) {
    cout << "NO";
    do {
      cout << "\n";
    } while (0);
    ;
    return;
  }
  int min_jumps = ceil((double)(water) / (double)(D - 1));
  if (min_jumps > M + 1) {
    cout << "NO";
    do {
      cout << "\n";
    } while (0);
    ;
    return;
  }
  cout << "YES";
  do {
    cout << "\n";
  } while (0);
  ;
  int no_plat;
  for (no_plat = 1; no_plat < M + 1; ++no_plat) {
    int next_jump = min(D, water + 1);
    int i = 0;
    for (i = 0; i < next_jump - 1; ++i) {
      cout << "0 ";
    }
    for (i = 0; i < c[no_plat]; ++i) {
      cout << no_plat << " ";
    }
    water -= (next_jump - 1);
  }
  int w = 0;
  for (w = 0; w < water; ++w) {
    cout << "0 ";
  }
}
int main() {
  do {
    cin >> N >> M >> D;
  } while (0);
  ;
  readVectFrom1(c, M);
  sol();
  return 0;
}
