#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
template <typename T>
void chmin(T &x, const T &y) {
  if (x > y) x = y;
}
template <typename T>
void chmax(T &x, const T &y) {
  if (x < y) x = y;
}
template <typename T>
T gcd(T x, T y) {
  return y ? gcd(y, x % y) : x;
}
template <class T>
inline bool read(T &ret) {
  char c = getchar();
  int sgn;
  if (c == EOF) return 0;
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  sgn = (c == '-') ? -1 : 1;
  ret = (c == '-') ? 0 : (c - '0');
  while (static_cast<void>(c = getchar()), c >= '0' && c <= '9')
    ret = ret * 10 + (c - '0');
  ret *= sgn;
  return 1;
}
template <class T>
inline void write(T x) {
  if (x > 9) out(x / 10);
  putchar(x % 10 + '0');
}
const int N = 1e5 + 5;
int x[4], y[4], an[N], n;
void doit(int j) {
  int k = 0;
  for (int i = 0; i < (int)(4); ++i) y[i] = x[i];
  while (true) {
    if (j == 4 || y[j] == 0) break;
    an[k++] = j;
    --y[j];
    if (j > 0 && y[j - 1] > 0)
      --j;
    else
      ++j;
  }
  if (k == n) {
    cout << "YES" << endl << an[0];
    for (int i = 1; i < (int)(n); ++i) cout << ' ' << an[i];
    cout << endl;
    exit(0);
  }
}
void solve(int times) {
  for (int i = 0; i < (int)(4); ++i) cin >> x[i], n += x[i];
  for (int j = 0; j < (int)(4); ++j) doit(j);
  cout << "NO" << endl;
}
void Init() {}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int times = 1;
  {
    solve(times++);
    Init();
  }
  return 0;
}
