#include <bits/stdc++.h>
#pragma GCC optimize("-O3", "unroll-loops")
using namespace std;
template <typename T1, typename T2>
inline void chmin(T1& a, T2 b) {
  if (a > b) a = b;
}
template <typename T1, typename T2>
inline void chmax(T1& a, T2 b) {
  if (a < b) a = b;
}
const long long MOD = 1e9 + 7;
const long long MAX = 200050;
const double pi = acos(-1);
const double EPS = 1e-12;
const long long INF = 1e18;
void fin(vector<long long>& ans) {
  cout << ("YES") << '\n';
  for (long long i = 0; i < ans.size(); ++i) {
    cout << (ans[i]) << " ";
  }
  cout << endl;
  exit(0);
}
void fin2(vector<long long>& ans) {
  cout << ("YES") << '\n';
  for (long long i = 0; i < ans.size(); ++i) {
    cout << (3 - ans[i]) << " ";
  }
  cout << endl;
  exit(0);
}
long long cnt[5];
long long c[5];
bool bad() {
  if (c[0] < 0 || c[1] < 0 || c[2] < 0 || c[3] < 0)
    return true;
  else
    return false;
}
bool good() { return (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0); }
void solve() {
  for (long long i = 0; i < 4; ++i) cin >> cnt[i];
  for (long long s = 0; s < 4; ++s) {
    if (s == 0) {
      for (long long i = 0; i < 4; ++i) c[i] = cnt[i];
      vector<long long> ans;
      long long now = 0;
      c[0]--;
      ans.push_back(0);
      if (bad()) goto END;
      while (c[0] > 0) {
        if (now == 0) {
          ans.push_back(1), c[1]--, now = 1;
          if (bad()) goto END;
        } else {
          ans.push_back(0), c[0]--, now = 0;
        }
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin(ans);
      if (now == 0) {
        ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin(ans);
      ans.push_back(2), c[2]--, now = 2;
      if (bad()) goto END;
      while (c[3] > 0) {
        if (now == 2) {
          ans.push_back(3), c[3]--, now = 3;
          if (bad()) goto END;
        } else {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        }
      }
      while (c[1] > 0 || c[2] > 0) {
        if (now == 3) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else if (now == 1) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else
          ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin(ans);
    } else if (s == 1) {
      for (long long i = 0; i < 4; ++i) c[i] = cnt[i];
      vector<long long> ans;
      long long now = 1;
      c[1]--;
      ans.push_back(1);
      if (bad()) goto END;
      while (c[0] > 0) {
        if (now == 0) {
          ans.push_back(1), c[1]--, now = 1;
          if (c[1] < 0) goto END;
        } else {
          ans.push_back(0), c[0]--, now = 0;
        }
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin(ans);
      if (now == 0) {
        ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin(ans);
      ans.push_back(2), c[2]--, now = 2;
      if (bad()) goto END;
      while (c[3] > 0) {
        if (now == 2) {
          ans.push_back(3), c[3]--, now = 3;
          if (bad()) goto END;
        } else {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        }
      }
      while (c[1] > 0 || c[2] > 0) {
        if (now == 3) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else if (now == 1) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else
          ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin(ans);
    } else if (s == 2) {
      for (long long i = 0; i < 4; ++i) c[3 - i] = cnt[i];
      vector<long long> ans;
      long long now = 1;
      c[1]--;
      ans.push_back(1);
      if (bad()) goto END;
      while (c[0] > 0) {
        if (now == 0) {
          ans.push_back(1), c[1]--, now = 1;
          if (c[1] < 0) goto END;
        } else {
          ans.push_back(0), c[0]--, now = 0;
        }
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin2(ans);
      if (now == 0) {
        ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin2(ans);
      ans.push_back(2), c[2]--, now = 2;
      if (bad()) goto END;
      while (c[3] > 0) {
        if (now == 2) {
          ans.push_back(3), c[3]--, now = 3;
          if (bad()) goto END;
        } else {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        }
      }
      while (c[1] > 0 || c[2] > 0) {
        if (now == 3) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else if (now == 1) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else
          ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin2(ans);
    } else if (s == 3) {
      for (long long i = 0; i < 4; ++i) c[3 - i] = cnt[i];
      vector<long long> ans;
      long long now = 0;
      c[0]--;
      ans.push_back(0);
      if (bad()) goto END;
      while (c[0] > 0) {
        if (now == 0) {
          ans.push_back(1), c[1]--, now = 1;
          if (c[1] < 0) goto END;
        } else {
          ans.push_back(0), c[0]--, now = 0;
        }
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin2(ans);
      if (now == 0) {
        ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin2(ans);
      ans.push_back(2), c[2]--, now = 2;
      if (bad()) goto END;
      while (c[3] > 0) {
        if (now == 2) {
          ans.push_back(3), c[3]--, now = 3;
          if (bad()) goto END;
        } else {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        }
      }
      while (c[1] > 0 || c[2] > 0) {
        if (now == 3) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else if (now == 1) {
          ans.push_back(2), c[2]--, now = 2;
          if (bad()) goto END;
        } else
          ans.push_back(1), c[1]--, now = 1;
        if (bad()) goto END;
      }
      if (c[0] == 0 && c[1] == 0 && c[2] == 0 && c[3] == 0) fin2(ans);
    }
  END:;
  }
  cout << ("NO") << '\n';
}
signed main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  solve();
}
