#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;   }