#include <bits/stdc++.h>
using namespace std;
long long INF = 1 << 28;
const double pi = acos(-1.0);
int fx[] = {1, -1, 0, 0};
int fy[] = {0, 0, 1, -1};
int dir[4][2] = {1, 0, -1, 0, 0, -1, 0, 1};
int knight[8][2] = {1, 2, 1, -2, 2, 1, 2, -1, -1, 2, -1, -2, -2, 1, -2, -1};
const long double EPS = 1e-7;
long long gcd(long long a, long long b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
bool cmp(int a, int b) { return a < b; }
int on(int mask, int st) { return mask | (1 << st); }
int off(int mask, int st) { return mask & (~(1 << st)); }
const int mx = 500010;
vector<int> v;
int arr[10];
int vis[mx];
int fun(int x0, int x1, int x2, int x3, int a, int b, int c, int d) {
  int sum = a + b + c + d;
  int i = 0;
  int tot = sum;
  while (a > 0 && b > 0) {
    vis[i++] = x0;
    a--;
    vis[i++] = x1;
    b--;
    sum -= 2;
  }
  if (a) {
    vis[i++] = x0;
    a--;
    sum--;
  }
  while (c > 0 && b > 0) {
    vis[i++] = x2;
    vis[i++] = x1;
    b--;
    c--;
    sum -= 2;
  }
  if (c) {
    vis[i++] = x2;
    c--;
    sum--;
  }
  while (c > 0 && d > 0) {
    vis[i++] = x3;
    vis[i++] = x2;
    c--;
    d--;
    sum -= 2;
  }
  if (d) {
    vis[i++] = x3;
    d--;
    sum--;
  }
  int j = i;
  if (sum == 0) {
    for (int j = 1; j < tot; j++) {
      if (abs(vis[j] - vis[j - 1]) != 1) return 1;
    }
  }
  return sum;
}
int main() {
  int a, b, c, d;
  scanf("%d %d %d", &a, &b, &c);
  scanf("%d", &d);
  arr[0] = a;
  arr[1] = b;
  arr[2] = c;
  arr[3] = d;
  v.push_back(0);
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  do {
    int x =
        fun(v[0], v[1], v[2], v[3], arr[v[0]], arr[v[1]], arr[v[2]], arr[v[3]]);
    if (x == 0) {
      cout << "YES" << endl;
      for (int i = 0; i < (a + b + c + d); i++) printf("%d ", vis[i]);
      return 0;
    }
  } while (next_permutation(v.begin(), v.end()));
  cout << "NO" << endl;
  return 0;
}
