#include <bits/stdc++.h>
using namespace std;
int a[4];
vector<int> solve(int start, int end, vector<int> b) {
  if (start == 1) {
    b[start]--;
    vector<int> res;
    res.push_back(start);
    while (b[0] > 0) {
      b[0]--;
      b[1]--;
      res.push_back(0);
      res.push_back(1);
    }
    int ptr = 1;
    if (b[3] > 0) {
      b[2]--;
      res.push_back(2);
      while (b[3] > 0) {
        b[3]--;
        b[2]--;
        res.push_back(3);
        res.push_back(2);
      }
      ptr = 2;
    }
    ptr = 3 - ptr;
    while (b[ptr] > 0) {
      b[ptr]--;
      res.push_back(ptr);
      ptr = 3 - ptr;
    }
    if (b[0] != 0 || b[1] != 0 || b[2] != 0 || b[3] != 0) return {};
    if (res.back() == end) return res;
    return {};
  } else {
    auto c = b;
    c[0] = b[3];
    c[1] = b[2];
    c[2] = b[1];
    c[3] = b[0];
    auto s = solve(3 - start, 3 - end, c);
    if (s.empty()) return {};
    for (auto& x : s) x = 3 - x;
    return s;
  }
}
vector<int> get_ans(int start, int end) {
  if (a[0] + a[1] + a[2] + a[3] == 1) {
    if (start == end && a[start]) return {start};
    return {};
  }
  vector<int> b{a[0], a[1], a[2], a[3]};
  int ss = -1;
  int ee = -1;
  if (start == 0) {
    start++;
    b[0]--;
    ss = 0;
  }
  if (start == 3) {
    start--;
    b[3]--;
    ss = 3;
  }
  if (end == 0) {
    end++;
    b[0]--;
    ee = 0;
  }
  if (end == 3) {
    end--;
    b[3]--;
    ee = 3;
  }
  auto s = solve(start, end, b);
  if (!s.empty()) {
    if (ee >= 0) {
      s.push_back(ee);
    }
    if (ss >= 0) {
      s.insert(s.begin(), ss);
    }
    return s;
  }
  return {};
}
vector<int> solve(vector<int> b) {
  for (int i = 0; i < 4; i++) a[i] = b[i];
  vector<int> ans;
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      auto res = get_ans(i, j);
      if (!res.empty()) ans = res;
    }
  }
  return ans;
}
vector<int> generate(int len = 20) {
  int s = rand() % 4;
  vector<int> res;
  vector<int> b(4);
  for (int i = 0; i < len; i++) {
    res.push_back(s);
    b[s]++;
    if (s == 0)
      s++;
    else if (s == 3)
      s--;
    else
      s += (rand() % 2) * 2 - 1;
  }
  return b;
}
int main() {
  ios::sync_with_stdio(false);
  vector<int> b(4);
  cin >> b[0] >> b[1] >> b[2] >> b[3];
  auto ans = solve(b);
  if (!ans.empty()) {
    cout << "YES" << endl;
    for (auto x : ans) cout << x << " ";
    cout << endl;
  } else {
    cout << "NO" << endl;
  }
  return 0;
}
