#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f, mod = 1000000007;
const double pi = 3.1415926535897932, eps = 1e-6;
int a[6], b[6], lst;
vector<int> cur;
void print() {
  puts("YES");
  for (int(i) = (0); (i) < (cur.size()); (i)++) printf("%d ", cur[i]);
  exit(0);
}
bool put() {
  for (int(i) = (0); (i) <= (3); (i)++) b[i] = a[i];
  int lim = min(b[0], b[1]);
  for (int(i) = (1); (i) <= (lim); (i)++) {
    cur.push_back(0);
    cur.push_back(1);
    b[0]--;
    b[1]--;
  }
  if (b[1] + b[2] + b[3] == 0 && b[0] && lst != 0) cur.push_back(0), b[0]--;
  if (b[0]) return 0;
  lim = min(b[1], b[2]);
  for (int(i) = (1); (i) <= (lim); (i)++) {
    cur.push_back(2);
    cur.push_back(1);
    b[1]--;
    b[2]--;
  }
  if (b[2] + b[3] == 0 && b[1] && lst != 1) cur.push_back(1), b[1]--;
  if (b[1]) return 0;
  lim = min(b[2], b[3]);
  for (int(i) = (1); (i) <= (lim); (i)++) {
    cur.push_back(2);
    cur.push_back(3);
    b[2]--;
    b[3]--;
  }
  if (b[3] == 0 && b[2] && lst != 2) cur.push_back(2), b[2]--;
  if (b[2]) return 0;
  return b[0] + b[1] + b[2] + b[3] == 0;
}
int main() {
  int mv = 0;
  scanf("%d%d%d%d", &a[0], &a[1], &a[2], &a[3]);
  if (a[0] == 0 && a[1] == 0) mv = 2;
  if (a[mv + 1]) {
    lst = mv + 1;
    cur.push_back(mv + 1);
    a[mv + 1]--;
    if (put()) print();
    cur.clear();
    a[mv + 1]++;
  }
  lst = -1;
  if (put()) print();
  cur.clear();
  puts("NO");
  return 0;
}
