#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
const double inf = 0x3f3f3f3f;
long long read() {
  long long x = 0, t = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') t = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = 10 * x + ch - '0';
    ch = getchar();
  }
  return x * t;
}
int ans[N];
int main() {
  int T = 1;
  while (T--) {
    int a = read(), b = read(), c = read(), d = read();
    if (a - b == 1 && c == d && c == 0) {
      printf("YES\n");
      ans[1] = 0;
      for (int i = 1; i <= b; i++) ans[2 * i] = 1, ans[2 * i + 1] = 0;
      for (int i = 1; i <= a + b; i++)
        printf("%d%c", ans[i], i == a + b ? '\n' : ' ');
      continue;
    } else if (a == b && d - c == 1 && a == 0) {
      printf("YES\n");
      ans[1] = 3;
      for (int i = 1; i <= c; i++) ans[2 * i] = 2, ans[2 * i + 1] = 3;
      for (int i = 1; i <= c + d; i++)
        printf("%d%c", ans[i], i == d + c ? '\n' : ' ');
      continue;
    } else if (a > b || d > c || abs(b - a - c + d) > 1) {
      printf("NO\n");
      continue;
    }
    int tot = 0, pos = 1;
    for (int i = 1; i <= a; i++) ans[++tot] = 0, ans[++tot] = 1;
    for (int i = 1; i <= d; i++) ans[++tot] = 2, ans[++tot] = 3;
    b -= a;
    c -= d;
    for (int i = min(b, c); i > 0; i--) ans[++tot] = 2, ans[++tot] = 1;
    if (c > b)
      ans[++tot] = 2;
    else if (c < b)
      ans[pos = 0] = 1;
    printf("YES\n");
    for (int i = pos; i <= tot; i++)
      printf("%d%c", ans[i], i == tot ? '\n' : ' ');
  }
  return 0;
}
