#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const long long INF = 1e9 + 47;
const long long LINF = INF * INF;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void bad() {
  cout << "NO" << endl;
  exit(0);
}
vector<int> cnt;
void check(vector<int> ans) {
  map<int, int> C;
  for (auto i : ans) C[i]++;
  for (int i = (0); i < (4); ++i)
    if (C[i] != cnt[i]) bad();
  for (int i = (0); i < ((int)((ans).size()) - 1); ++i)
    if (abs(ans[i] - ans[i + 1]) != 1) bad();
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cnt.assign(4, 0);
  int sum = 0;
  for (int i = (0); i < (4); ++i) cin >> cnt[i], sum += cnt[i];
  if (sum == 1) {
    cout << "YES" << endl;
    for (int i = (0); i < (4); ++i)
      if (cnt[i]) cout << i << endl;
    return 0;
  }
  if (cnt[0] + cnt[2] == 0) bad();
  if (cnt[0] > cnt[1] + 1) bad();
  if (cnt[0] == cnt[1] + 1) {
    if (cnt[2] || cnt[3]) bad();
    cout << "YES" << endl;
    cout << "0 ";
    for (int i = (0); i < (cnt[1]); ++i) cout << "1 0 ";
    cout << endl;
    return 0;
  }
  if (cnt[3] > cnt[2] + 1) bad();
  if (cnt[3] == cnt[2] + 1) {
    if (cnt[0] || cnt[1]) bad();
    cout << "YES" << endl;
    cout << "3 ";
    for (int i = (0); i < (cnt[2]); ++i) cout << "2 3 ";
    cout << endl;
    return 0;
  }
  vector<int> parni, neparni;
  for (int i = (0); i < (cnt[0]); ++i) parni.push_back(0);
  for (int i = (0); i < (cnt[2]); ++i) parni.push_back(2);
  for (int i = (0); i < (cnt[0]); ++i) neparni.push_back(1);
  for (int i = (0); i < (cnt[3]); ++i) neparni.push_back(3);
  while ((int)((neparni).size()) < (int)((parni).size()) - 1)
    neparni.push_back(1);
  int she1 = cnt[1], she3 = cnt[3];
  for (auto i : neparni)
    if (i == 1)
      she1--;
    else
      she3--;
  bool persh1 = false;
  bool persh3 = false;
  if (she1) {
    she1--;
    persh1 = true;
  } else if (parni[0] == 2 && she3) {
    she3--;
    persh3 = true;
  }
  if (she1) she1--, neparni.push_back(1);
  if (she3) she3--, neparni.push_back(3);
  vector<int> ans;
  if (persh1) ans.push_back(1);
  if (persh3) ans.push_back(3);
  for (int i = (0); i < ((int)((parni).size())); ++i) {
    ans.push_back(parni[i]);
    if (i < (int)((neparni).size())) ans.push_back(neparni[i]);
  }
  check(ans);
  cout << "YES" << endl;
  for (auto i : ans) cout << i << ' ';
  cout << endl;
  cerr << "Time elapsed: " << clock() / (double)CLOCKS_PER_SEC << endl;
  return 0;
}
