#include <bits/stdc++.h>
using namespace std;
deque<long long> v;
map<long long, long long> mp;
void func(long long x, long long y) {
  if (v.size() && mp[y] > mp[x] && abs(y - v[v.size() - 1]) != 1) {
    if (v.size() && abs(v[v.size() - 1] - y) != 1) {
      long long h = v[v.size() - 1];
      v.pop_back();
      v.push_front(h);
      swap(x, y);
    }
    v.push_back(x);
    mp[x]--;
    while (mp[y] > 0) {
      v.push_back(y);
      mp[y]--;
      if (mp[y] == 0) break;
      if (mp[x] == 0) break;
      v.push_back(x);
      mp[x]--;
    }
  } else if (mp[x] > mp[y]) {
    v.push_back(x);
    mp[x]--;
    while (mp[y] > 0) {
      v.push_back(y);
      mp[y]--;
      if (mp[y] == 0) break;
      if (mp[x] == 0) break;
      v.push_back(x);
      mp[x]--;
    }
  } else if (mp[x] == mp[y]) {
    for (long long i = 0; i < mp[x]; i++) {
      v.push_back(x);
      v.push_back(y);
    }
    mp[x] = 0;
    mp[y] = 0;
  } else {
    v.push_back(y);
    mp[y]--;
    while (mp[x] > 0) {
      v.push_back(x);
      mp[x]--;
      if (mp[x] == 0) break;
      v.push_back(y);
      mp[y]--;
    }
  }
}
int main() {
  long long a, b, c, d;
  cin >> a >> b >> c >> d;
  mp[0] = a;
  mp[1] = b;
  mp[2] = c;
  mp[3] = d;
  long long tot = a + b + c + d;
  long long curr = 0;
  long long nxt = 1;
  while (1) {
    if (mp[0]) {
      func(0, 1);
    } else if (mp[1]) {
      func(1, 2);
    } else if (mp[2]) {
      func(2, 3);
    } else if (mp[3]) {
      for (long long i = 0; i < mp[3]; i++) v.push_back(3);
      mp[3] = 0;
    } else
      break;
  }
  long long flg = 0;
  for (long long i = 0; i < v.size() - 1; i++)
    if (abs(v[i] - v[i + 1]) != 1) flg = 1;
  if (flg)
    cout << "NO" << endl;
  else {
    cout << "YES" << endl;
    for (long long i = 0; i < v.size(); i++) cout << v[i] << " ";
    cout << endl;
  }
  return 0;
}
