#include <bits/stdc++.h>
using namespace std;
int one, two, three, four;
bool check(deque<int> x) {
  int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
  for (int i = 0; i < x.size(); i++) {
    if (x[i] == 0) cnt1++;
    if (x[i] == 1) cnt2++;
    if (x[i] == 2) cnt3++;
    if (x[i] == 3) cnt4++;
  }
  if (cnt1 == one && cnt2 == two && cnt3 == three & cnt4 == four) {
    for (int i = 0; i + 1 < x.size(); i++) {
      if (abs(x[i] - x[i + 1]) != 1) return 0;
    }
    cout << "YES" << '\n';
    for (int i : x) cout << i << ' ';
    exit(0);
  }
  return 0;
}
deque<int> merge(deque<int> x, deque<int> y) {
  for (int i : y) x.push_back(i);
  return x;
}
void go2(pair<int, int> a, pair<int, int> b, deque<int> ans) {
  deque<int> ans2 = ans;
  if (a.first < b.first) {
    for (int i = 0; i < a.first; i++) {
      ans.push_back(b.second);
      ans.push_back(a.second);
    }
    ans.push_back(b.second);
  } else {
    for (int i = 0; i < b.first; i++) {
      ans.push_back(a.second);
      ans.push_back(b.second);
    }
    if (a.first != b.first) ans.push_back(a.second);
  }
  check(ans);
  ans = ans2;
  if (a.first <= b.first) {
    for (int i = 0; i < a.first; i++) {
      ans.push_back(b.second);
      ans.push_back(a.second);
    }
    if (a.first != b.first) ans.push_back(b.second);
  } else {
    for (int i = 0; i < b.first; i++) {
      ans.push_back(a.second);
      ans.push_back(b.second);
    }
    if (a.first != b.first) ans.push_back(a.second);
  }
  ans = ans2;
  deque<int> zl;
  if (a.first < b.first) {
    for (int i = 0; i < a.first; i++) {
      zl.push_back(b.second);
      zl.push_back(a.second);
    }
    zl.push_back(b.second);
  } else {
    for (int i = 0; i < b.first; i++) {
      zl.push_back(a.second);
      zl.push_back(b.second);
    }
    if (a.first != b.first) zl.push_back(a.second);
  }
  check(merge(zl, ans));
  zl.clear();
  if (a.first <= b.first) {
    for (int i = 0; i < a.first; i++) {
      zl.push_back(b.second);
      zl.push_back(a.second);
    }
    if (a.first != b.first) zl.push_back(b.second);
  } else {
    for (int i = 0; i < b.first; i++) {
      zl.push_back(a.second);
      zl.push_back(b.second);
    }
    if (a.first != b.first) zl.push_back(a.second);
  }
  check(merge(zl, ans));
}
void go3(pair<int, int> a, pair<int, int> b, pair<int, int> c, deque<int> cur) {
  deque<int> ans;
  if (a.first <= b.first) {
    for (int i = 0; i < a.first; i++) {
      ans.push_back(a.second);
      ans.push_back(b.second);
    }
    go2(pair<int, int>(b.first - a.first, b.second), c, merge(cur, ans));
    go2(pair<int, int>(b.first - a.first, b.second), c, merge(ans, cur));
    ans.clear();
    for (int i = 0; i < a.first; i++) {
      ans.push_back(b.second);
      ans.push_back(a.second);
    }
    go2(pair<int, int>(b.first - a.first, b.second), c, merge(cur, ans));
    go2(pair<int, int>(b.first - a.first, b.second), c, merge(ans, cur));
  }
  ans.clear();
  if (c.first <= b.first) {
    for (int i = 0; i < c.first; i++) {
      ans.push_back(c.second);
      ans.push_back(b.second);
    }
    go2(a, pair<int, int>(b.first - c.first, b.second), merge(cur, ans));
    go2(a, pair<int, int>(b.first - c.first, b.second), merge(ans, cur));
    ans.clear();
    for (int i = 0; i < c.first; i++) {
      ans.push_back(b.second);
      ans.push_back(c.second);
    }
    go2(a, pair<int, int>(b.first - c.first, b.second), merge(cur, ans));
    go2(a, pair<int, int>(b.first - c.first, b.second), merge(ans, cur));
  }
}
void go4(int a, int b, int c, int d) {
  if (a <= b) {
    deque<int> lul;
    for (int i = 0; i < a; i++) {
      lul.push_back(0);
      lul.push_back(1);
    }
    go3(pair<int, int>(b - a, 1), pair<int, int>(c, 2), pair<int, int>(d, 3),
        lul);
    lul.clear();
    for (int i = 0; i < a; i++) {
      lul.push_back(1);
      lul.push_back(0);
    }
    go3(pair<int, int>(b - a, 1), pair<int, int>(c, 2), pair<int, int>(d, 3),
        lul);
  }
  if (d <= c) {
    deque<int> lul;
    for (int i = 0; i < d; i++) {
      lul.push_back(3);
      lul.push_back(2);
    }
    go3(pair<int, int>(a, 0), pair<int, int>(b, 1), pair<int, int>(c - d, 2),
        lul);
    lul.clear();
    for (int i = 0; i < d; i++) {
      lul.push_back(2);
      lul.push_back(3);
    }
    go3(pair<int, int>(a, 0), pair<int, int>(b, 1), pair<int, int>(c - d, 2),
        lul);
  }
}
int main() {
  cin >> one >> two >> three >> four;
  go4(one, two, three, four);
  cout << "NO";
  return 0;
}
