#include <bits/stdc++.h>
#pragma GCC optimize("-O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
const long long MAXN = 1123456;
const long long N = 2e6;
const long long inf = 3e18;
const long long con = 4000;
mt19937_64 rnd(chrono::system_clock::now().time_since_epoch().count());
template <typename T>
void vout(T s) {
  cout << s << endl;
  exit(0);
}
long long bp(long long a, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res *= a;
    a *= a;
    n >>= 1;
  }
  return res;
}
void solve1(long long a, long long b, long long c, long long d) {
  vector<long long> ans;
  while (a--) {
    ans.push_back(0ll);
    if (!b) {
      if (c || d) return;
      if (a) return;
      break;
    }
    b--;
    ans.push_back(1ll);
  }
  while (b--) {
    if (!c) return;
    c--;
    ans.push_back(2ll);
    ans.push_back(1ll);
  }
  bool step = 1;
  while (d || c) {
    if (step) {
      if (!c) return;
      c--;
      ans.push_back(2ll);
    } else {
      if (!d) return;
      d--;
      ans.push_back(3ll);
    }
    step ^= 1;
  }
  cout << "YES\n";
  for (auto i : ans) cout << i << " ";
  cout << "\n";
  exit(0);
}
void solve2(long long a, long long b, long long c, long long d) {
  vector<long long> ans;
  while (a--) {
    if (!b) return;
    b--;
    ans.push_back(1ll);
    ans.push_back(0ll);
  }
  if (!b) {
    if (c || d) return;
  } else {
    ans.push_back(1ll);
    b--;
  }
  while (b--) {
    if (!c) return;
    c--;
    ans.push_back(2ll);
    ans.push_back(1ll);
  }
  bool step = 1;
  while (d || c) {
    if (step) {
      if (!c) return;
      c--;
      ans.push_back(2ll);
    } else {
      if (!d) return;
      d--;
      ans.push_back(3ll);
    }
    step ^= 1;
  }
  cout << "YES\n";
  for (auto i : ans) cout << i << " ";
  cout << "\n";
  exit(0);
}
void solve3(long long a, long long b, long long c, long long d) {
  vector<long long> ans;
  swap(a, d);
  swap(b, c);
  while (a--) {
    ans.push_back(0ll);
    if (!b) {
      if (c || d) return;
      if (a) return;
      break;
    }
    if (!b) return;
    b--;
    ans.push_back(1ll);
  }
  while (b--) {
    if (!c) return;
    c--;
    ans.push_back(2ll);
    ans.push_back(1ll);
  }
  bool step = 1;
  while (d || c) {
    if (step) {
      if (!c) return;
      c--;
      ans.push_back(2ll);
    } else {
      if (!d) return;
      d--;
      ans.push_back(3ll);
    }
    step ^= 1;
  }
  cout << "YES\n";
  for (auto i : ans) cout << 3 - i << " ";
  cout << "\n";
  exit(0);
}
void solve4(long long a, long long b, long long c, long long d) {
  vector<long long> ans;
  swap(a, d);
  swap(b, c);
  while (a--) {
    if (!b) return;
    b--;
    ans.push_back(1ll);
    ans.push_back(0ll);
  }
  if (!b) {
    if (c || d) return;
  } else {
    ans.push_back(1ll);
    b--;
  }
  while (b--) {
    if (!c) return;
    c--;
    ans.push_back(2ll);
    ans.push_back(1ll);
  }
  bool step = 1;
  while (d || c) {
    if (step) {
      if (!c) return;
      c--;
      ans.push_back(2ll);
    } else {
      if (!d) return;
      d--;
      ans.push_back(3ll);
    }
    step ^= 1;
  }
  cout << "YES\n";
  for (auto i : ans) cout << 3 - i << " ";
  cout << "\n";
  exit(0);
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  long long a, b, c, d;
  cin >> a >> b >> c >> d;
  vector<long long> cnt(4);
  cnt[0] = a;
  cnt[1] = b;
  cnt[2] = c;
  cnt[3] = d;
  if (!cnt[1] && !cnt[2]) {
    if (cnt[0] + cnt[3] > 1) {
      vout("NO");
    }
    if (cnt[0]) vout("YES\n0\n");
    if (cnt[3]) vout("YES\n3\n");
  }
  solve1(a, b, c, d);
  solve2(a, b, c, d);
  solve3(a, b, c, d);
  solve4(a, b, c, d);
  cout << "NO\n";
  return 0;
}
