#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int N = (int)4e5 + 100;
const long long inf = (long long)1e18 + 10000;
map<pair<pair<pair<int, int>, pair<int, int> >, int>, bool> was;
map<pair<pair<pair<int, int>, pair<int, int> >, int>, int> nex;
bool f(int a, int b, int c, int d, int l) {
  if (!a && !b && !c && !d) return 1;
  if (was.count({{{a, b}, {c, d}}, l})) return was[{{{a, b}, {c, d}}, l}];
  if (a && (abs(l - 1) == 1 || l == -100)) {
    if (f(a - 1, b, c, d, 1)) {
      nex[{{{a, b}, {c, d}}, l}] = 1;
      return was[{{{a, b}, {c, d}}, l}] = 1;
    }
  }
  if (b && (abs(l - 2) == 1 || l == -100)) {
    if (f(a, b - 1, c, d, 2)) {
      nex[{{{a, b}, {c, d}}, l}] = 2;
      return was[{{{a, b}, {c, d}}, l}] = 1;
    }
  }
  if (c && (abs(l - 3) == 1 || l == -100)) {
    if (f(a, b, c - 1, d, 3)) {
      nex[{{{a, b}, {c, d}}, l}] = 3;
      return was[{{{a, b}, {c, d}}, l}] = 1;
    }
  }
  if (d && (abs(l - 4) == 1 || l == -100)) {
    if (f(a, b, c, d - 1, 4)) {
      nex[{{{a, b}, {c, d}}, l}] = 4;
      return was[{{{a, b}, {c, d}}, l}] = 1;
    }
  }
  return was[{{{a, b}, {c, d}}, l}] = 0;
}
int main() {
  mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  srand(time(0));
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  if (!b && a && (c || d) || !c && d && (a || b)) {
    cout << "NO";
    return 0;
  }
  int q = max(0, a - 2);
  a -= q;
  b -= q;
  if (b < 0) {
    cout << "NO";
    return 0;
  }
  int w = max(0, d - 2);
  c -= w;
  d -= w;
  if (c < 0) {
    cout << "NO";
    return 0;
  }
  int e = max(min(b, c) - 4, 0);
  b -= e;
  c -= e;
  if (!f(a, b, c, d, -100)) {
    cout << "NO";
    return 0;
  }
  cout << "YES\n";
  int l = -100;
  while (a || b || c || d) {
    l = nex[{{{a, b}, {c, d}}, l}];
    if (l == 1) {
      cout << "0 ";
      if (!a) assert(0);
      a--;
      while (q) {
        cout << "1 0 ";
        q--;
      }
    } else {
      if (l == 2) {
        cout << "1 ";
        if (!b) assert(0);
        b--;
        while (q) {
          cout << "0 1 ";
          q--;
        }
        while (e) {
          cout << "2 1 ";
          e--;
        }
      } else {
        if (l == 3) {
          if (!c) assert(0);
          c--;
          cout << "2 ";
          while (e) {
            cout << "1 2 ";
            e--;
          }
          while (w) {
            cout << "3 2 ";
            w--;
          }
        } else {
          if (!d) assert(0);
          d--;
          cout << "3 ";
          while (w) {
            cout << "2 3 ";
            w--;
          }
        }
      }
    }
  }
}
