#include <bits/stdc++.h>
using namespace std;
deque<int> q;
int a[4];
int l1, l2, r1, r2;
int main() {
  scanf("%d", &a[0]), scanf("%d", &a[1]), scanf("%d", &a[2]),
      scanf("%d", &a[3]);
  int sum = a[0] + a[1] + a[2] + a[3];
  l1 = 0, l2 = 1, r1 = 2, r2 = 3;
  bool flag = true;
  while (a[0] || a[1] || a[2] || a[3]) {
    int x = -1;
    if (a[l1] || (l2 != -1 && a[l2])) {
      if (a[l1])
        x = l1;
      else
        x = l2;
      q.push_front(x), a[x]--;
      if (x == 0)
        l1 = 1, l2 = -1;
      else if (x == 1)
        l1 = 0, l2 = 2;
      else if (x == 2)
        l1 = 1, l2 = 3;
      else
        l1 = 2, l2 = -1;
      if (flag) {
        flag = false;
        if (x == 0)
          r1 = 1, r2 = -1;
        else if (x == 1)
          r1 = 0, r2 = 2;
        else if (x == 2)
          r1 = 1, r2 = 3;
        else
          r1 = 2, r2 = -1;
      }
    } else if (a[r1] || (r2 != -1 && a[r2])) {
      if (a[r1])
        x = r1;
      else
        x = r2;
      q.push_back(x), a[x]--;
      if (x == 0)
        r1 = 1, r2 = -1;
      else if (x == 1)
        r1 = 0, r2 = 2;
      else if (x == 2)
        r1 = 1, r2 = 3;
      else
        r1 = 2, r2 = -1;
      if (flag) {
        flag = false;
        if (x == 0)
          l1 = 1, l2 = -1;
        else if (x == 1)
          l1 = 0, l2 = 2;
        else if (x == 2)
          l1 = 1, l2 = 3;
        else
          l1 = 2, l2 = -1;
      }
    }
    if (x != -1 && !a[x]) {
      if (x == 0) {
        if (q.front() == x && a[1]) {
          q.push_front(1), a[1]--;
          l1 = 0, l2 = 2;
        }
        if (q.back() == x && a[1]) {
          q.push_back(1), a[1]--;
          r1 = 0, r2 = 2;
        }
      }
      if (x == 1) {
        if (q.front() == x && a[2]) {
          q.push_front(2), a[2]--;
          l1 = 0, l2 = 3;
        }
        if (q.back() == x && a[2]) {
          q.push_back(2), a[2]--;
          r1 = 0, r2 = 3;
        }
      }
      if (x == 2) {
        if (q.front() == x && a[3]) {
          q.push_front(3), a[3]--;
          l1 = 2, l2 = -1;
        }
        if (q.back() == x && a[3]) {
          q.push_back(3), a[3]--;
          r1 = 2, r2 = -1;
        }
      }
    }
    if (x == -1) break;
  }
  if (a[0] || a[1] || a[2] || a[3])
    printf("NO\n");
  else {
    printf("YES\n");
    while (!q.empty()) {
      printf("%d%c", q.back(), --sum == 0 ? '\n' : ' ');
      q.pop_back();
    }
    printf("\n");
  }
  return 0;
}
