#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define rep(i,a,b)  for (__typeof((b)) i=(a);i<=(b);i++)
#define nrep(i,a,b)  for (__typeof((b)) i=(b);i>=(a);i--)
#define all(a) (a).begin(),(a).end()
#define fast_io ios_base::sync_with_stdio(false); cin.tie(NULL)
const ll N = 1e5 + 5;
const ll N1 = 3e5 + 5;
const int LOGN = 17;
const ll mod = 1e9 + 7;

int main() {

    int aa = 0, bb = 1, cc = 2, dd = 3, shift = 0;
    int a, b, c, d;
    cin >> a >> b >> c >> d;

    /*if(a + b + c + d == 1) {
        cout << "YES\n";
        if(a == 1) {
            cout << "0";
        }
        if(b == 1) {
            cout << "1";
        }
        if(c == 1) {
            cout << "2";
        }
        if(d == 1) {
            cout << "3";
        }
        return 0;
    }*/

    while(a == 0) {
        a = b;
        b = c;
        c = d;
        d = 0;
        shift++;
    }

    if(a > b) {
        if(a == b + 1 and max(c, d) == 0) {
            cout << "YES\n";
            cout << aa + shift << " ";
            for(int i=0;i<b;i++) {
                cout << bb + shift << " " << aa + shift << " ";
            }
        }
        else {
            cout << "NO\n";
        }
        return 0;
    }

    if(d > c) {
        if(d == c + 1 and max(a, b) == 0) {
            cout << "YES\n";
            cout << dd + shift << " ";
            for(int i=0;i<c;i++) {
                cout << cc + shift << " " << dd + shift << " ";
            }
        }
        else {
            cout << "NO\n";
        }
        return 0;
    }

    /*if(b > a + c) {
        if(b <= a + c + 1 and d == 0) {
            cout << "YES\n";
            if(b == a + c + 1) { cout << "1 "; b--; }
            for(int i=0;i<b;i++) {
                if(i < a) {
                    cout << aa + shift << " " << bb + shift << " ";
                }
                else {
                    cout << cc + shift << " " << bb + shift << " ";
                }
            }
        }
        else if(max(a, d) == 0 and b == c + 1) {
            cout << "YES\n";
            cout << "1 ";
            for(int i=0;i<c;i++) {
                cout << "2 1 ";
            }
        }
        else if(max(c, d) == 0 and b == a + 1) {
            cout << "YES\n";
            cout << "1 ";
            for(int i=0;i<a;i++) {
                cout << "0 1 ";
            }
        }
        else {
            cout << "NO\n";
        }
        return 0;
    }

    if(c > b + d) {
        if(c <= b + d + 1 and a == 0) {
            cout << "YES\n";
            if(c == b + d + 1) {cout << "2 "; c--;}
            for(int i=0;i<c;i++) {
                if(i < b) {
                    cout << bb + shift << " " << cc + shift << " ";
                }
                else {
                    cout << dd + shift << " " << cc + shift << " ";
                }
            }
        }
        else if(max(b, a) == 0 and c == d + 1) {
            cout << "YES\n";
            cout << "2 ";
            for(int i=0;i<d;i++) {
                cout << "3 2 ";
            }
        }
        else if(max(d, a) == 0 and c == b + 1) {
            cout << "YES\n";
            cout << "2 ";
            for(int i=0;i<b;i++) {
                cout << "1 2 ";
            }
        }
        else {
            cout << "NO\n";
        }
        return 0;
    }*/

    if(a == b and c == d) {
        cout << "YES\n";
        for(int i=0;i<a;i++) {
            cout << aa + shift << " " << bb + shift << " ";
        }
        for(int i=0;i<c;i++) {
            cout << cc + shift << " " << dd + shift << " ";
        }
        return 0;
    }

    if(abs((a + c) - (b + d)) > 1) {
        cout << "NO\n";
        return 0;
    }
    // else cout << "YES\n";
    if(c + a > b + d) { swap(a, d); swap(b, c); swap(aa, dd); swap(bb, cc); }

    vector <int> result;

    while(a > 0 and b > 0) {
        result.pb(bb + shift);
        result.pb(aa + shift);
        // cout << bb + shift << " " << aa + shift << " ";
        a--;
        b--;
    }

    if(a > 0) {
        result.pb(aa + shift);
        a--;
    }
    while(b > 0 and c > 0) {
        result.pb(bb + shift);
        result.pb(cc + shift);
        // cout << bb + shift << " " << cc + shift << " ";
        b--;
        c--;
    }
    if(b > 0) {
        result.pb(bb + shift);
        // cout << bb + shift << " ";
        b--;
    }
    while(c > 0) {
        result.pb(dd + shift);
        result.pb(cc + shift);
        // cout << dd + shift << " " << cc + shift << " ";
        c--;
        d--;
    }
    if(d > 0) {
        result.pb(dd + shift);
        d--;
        // cout << dd + shift;
    }

    if(a + b + c + d != 0 or max({a, b, c, d}) != 0) {
        cout << "NO\n";
        return 0;
    }

    for(int i=1;i<result.size();i++) {
        if(abs(result[i] - result[i - 1]) != 1) {
            cout << "NO\n";
            return 0;
        }
    }

    cout << "YES\n";
    for(auto it : result) {
        cout << it << " ";
    }

    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(abs(a+c - b - d) != 1)
    {
        cout << "NO\n";
    }
    else
    {
        vector<int> v(a+b+c+d);
        if(a+c > b+d)
        {
            for(int i=0;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=1;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        else
        {
           for(int i=1;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=0;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        bool check = true;
        for(int i=0;i<(int)v.size() - 1;i++)
        {
            if(abs(v[i] - v[i+1]) != 1)
            {
                check = false;
                break;
            }
        }
        if(check)
        {
            cout << "YES\n";
            for(int i:v) cout << i << " ";
            cout << "\n";
        }
        else cout << "NO";
    }

    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(abs(a+c - b - d) > 1)
    {
        cout << "NO\n";
    }
    else
    {
        vector<int> v(a+b+c+d);
        if(a+c > b+d)
        {
            for(int i=0;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=1;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        else
        {
           for(int i=1;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=0;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        bool check = true;
        for(int i=0;i<(int)v.size() - 1;i++)
        {
            if(abs(v[i] - v[i+1]) != 1)
            {
                check = false;
                break;
            }
        }
        if(check)
        {
            cout << "YES\n";
            for(int i:v) cout << i << " ";
            cout << "\n";
        }
        else cout << "NO";
    }

    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    vector<int> v = {a, b, c, d};
    vector<int> ans;

    int mx = -1;
    bool used = false;
    vector<int> pop(4, 0);
    while(1)
    {
        if(mx == -1) mx = max_element(v.begin(), v.end()) - v.begin();
        else if(mx == 1 && v[mx-1])
            mx--;
        else if(mx == 2 && v[mx+1])
            mx++;
        else if(mx == 0 || mx == 1)
            mx++;
        else if(mx == 3 || mx == 2)
            mx--;
        if(v[mx] <= 0)
        {
            if(used) break;
            used = true;
            if(ans.size() == 0) break;
            pop[ans[ans.size() - 1]]++;
            ans.pop_back();
            if(ans.size())
                mx = ans[ans.size() - 1];
            continue;
            //not chagning v[ans[-1]]
        }
        ans.push_back(mx);
        v[mx]--;
    }
    for(int i=0;i<4;i++)
        v[i] += pop[i];
    if(ans.size() + 1 == a + b + c + d)
    {
        mx = max_element(v.begin(), v.end()) - v.begin();
        if(abs(mx - ans[0]) == 1)
        {
            vector<int> temp = {mx};
            ans.insert(ans.begin(), temp.begin(), temp.end());
        }
        else if(ans.size() && abs(mx - ans[ans.size() - 1]) == 1)
        {
            vector<int> temp = {mx};
            ans.insert(ans.end(), temp.begin(), temp.end());
        }
    }
    bool check = true;
    if(ans.size() != (a+b+c+d)) check = false;
    for(int i=0;i<ans.size()-1;i++)
        if(abs(ans[i] - ans[i+1]) != 1)
        {
            check = false;
        }
    if(check)
    {
        cout << "YES\n";
        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";
    }
    else
    {
        cout << "NO";
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    vector<int> v = {a, b, c, d};
    vector<int> ans;

    int mx = -1;
    bool used = false;
    vector<int> pop(4, 0);
    while(1)
    {
        if(mx == -1) mx = max_element(v.begin(), v.end()) - v.begin();
        else if(mx == 1 && v[mx-1])
            mx--;
        else if(mx == 2 && v[mx+1])
            mx++;
        else if(mx == 0 || mx == 1)
            mx++;
        else if(mx == 3 || mx == 2)
            mx--;
        if(v[mx] <= 0)
        {
            if(used) break;
            used = true;
            if(ans.size() == 0) break;
            pop[ans[ans.size() - 1]]++;
            ans.pop_back();
            if(ans.size())
                mx = ans[ans.size() - 1];
            continue;
            //not chagning v[ans[-1]]
        }
        ans.push_back(mx);
        v[mx]--;
    }
    for(int i=0;i<4;i++)
        v[i] += pop[i];
    if(ans.size() + 1 == a + b + c + d)
    {
        mx = max_element(v.begin(), v.end()) - v.begin();
        if(abs(mx - ans[0]) == 1)
        {
            vector<int> temp = {mx};
            ans.insert(ans.begin(), temp.begin(), temp.end());
        }
        else if(ans.size() && abs(mx - ans[ans.size() - 1]) == 1)
        {
            vector<int> temp = {mx};
            ans.insert(ans.end(), temp.begin(), temp.end());
        }
    }
    bool check = true;
    if(ans.size() != (a+b+c+d)) check = false;
    for(int i=0;i<(int)ans.size()-1;i++)
        if(abs(ans[i] - ans[i+1]) != 1)
        {
            check = false;
        }
    if(check)
    {
        cout << "YES\n";
        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";
    }
    else
    {
        cout << "NO";
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(abs(a+c - b - d) > 1)
    {
        cout << "NO\n";
    }
    else
    {
        vector<int> v(a+b+c+d);
        if(a+c > b+d)
        {
            for(int i=0;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=1;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        else
        {
           for(int i=1;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=0;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        for(int i:v) cout << i << " ";
        cout << "\n";
        bool check = true;
        for(int i=0;i<(int)v.size() - 1;i++)
        {
            if(abs(v[i] - v[i+1]) != 1)
            {
                check = false;
                break;
            }
        }
        if(check)
        {
            cout << "YES\n";
            for(int i:v) cout << i << " ";
            cout << "\n";
        }
        else cout << "NO";
    }

    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    vector<int> v = {a, b, c, d};
    vector<int> ans;

    int mx = -1;
    bool used = false;
    vector<int> pop(4, 0);
    while(1)
    {
        if(mx == -1) mx = max_element(v.begin(), v.end()) - v.begin();
        else if(mx == 1 && v[mx-1])
            mx--;
        else if(mx == 2 && v[mx+1])
            mx++;
        else if(mx == 0 || mx == 1)
            mx++;
        else if(mx == 3 || mx == 2)
            mx--;
        if(v[mx] <= 0)
        {
            if(ans.size() == a + b + c + d) break;
            if(used) break;
            used = true;
            if(ans.size() == 0) break;
            pop[ans[ans.size() - 1]]++;
            ans.pop_back();
            if(ans.size())
                mx = ans[ans.size() - 1];
            continue;
            //not chagning v[ans[-1]]
        }
        v[mx]--;
    }
    for(int i=0;i<4;i++)
        v[i] += pop[i];
    if(ans.size() + 1 == a + b + c + d)
    {
        mx = max_element(v.begin(), v.end()) - v.begin();
        if(ans.size() == 0)
            ans.push_back(mx);
        else if(abs(mx - ans[0]) == 1)
        {
            vector<int> temp = {mx};
            ans.insert(ans.begin(), temp.begin(), temp.end());
        }
        else if(ans.size() && abs(mx - ans[ans.size() - 1]) == 1)
        {
            vector<int> temp = {mx};
            ans.insert(ans.end(), temp.begin(), temp.end());
        }
    }
    bool check = true;
    if(ans.size() != (a+b+c+d)) check = false;
    for(int i=0;i<(int)ans.size()-1;i++)
        if(abs(ans[i] - ans[i+1]) != 1)
        {
            check = false;
        }
    if(check)
    {
        cout << "YES\n";
        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";
    }
    else
    {
        cout << "NO";
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(a > b || d > c || (b > a+c) || (c > b + d))
        cout << "NO";
    else
    {
        cout << "YES\n";
        vector<int> v = {a, b, c, d};
        vector<int> ans;
        int last_used = -1;
        while(1)
        {
            int mx = max_element(v.begin(), v.end()) - v.begin();
            if(last_used == mx)
            {
                mx++;
            }
            else if(abs(last_used - mx) != 1)
            {
                mx++;
            }
            last_used = mx;
            if(mx == 2 && v[mx] == v[mx+1]) mx++;
            if(v[mx] <= 0) break;
            while(v[mx] > 0)
            {
                ans.push_back(mx);
                v[mx]--;
                if(mx == 1 || mx == 3)
                {
                    if(v[mx-1])
                    {
                        last_used = mx-1;
                        ans.push_back(mx-1);
                        v[mx-1]--;
                    }
                    else if(mx == 1 && v[mx+1])
                    {
                        last_used = mx+1;
                        ans.push_back(mx+1);
                        v[mx+1]--;
                    }
                }
                else
                {
                    if(v[mx+1])
                    {
                        last_used = mx+1;
                        ans.push_back(mx+1);
                        v[mx+1]--;
                    }
                    else if(mx == 2 && v[mx-1])
                    {
                        last_used = mx-1;
                        ans.push_back(mx-1);
                        v[mx-1]--;
                    }
                }
            }
        }
        //assert(ans.size() == (a+b+c+d));
        //for(int i=0;i<ans.size()-1;i++)
        //    assert(abs(ans[i] - ans[i+1]) == 1);

        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";

    }
    return 0;

}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    vector<int> v = {a, b, c, d};
    vector<int> ans;
    int last_used = -1;
    while(1)
    {
        int mx = max_element(v.begin(), v.end()) - v.begin();
        if(last_used == mx)
        {
            mx = (mx+1)%4;
        }
        else if(last_used != -1 && abs(last_used - mx) != 1)
        {
            mx++;
        }
        last_used = mx;
        if(mx == 2 && v[mx] == v[mx+1]) mx++;
        if(v[mx] <= 0) break;
        while(v[mx] > 0)
        {
            ans.push_back(mx);
            v[mx]--;
            if(mx == 1 || mx == 3)
            {
                if(v[mx-1])
                {
                    last_used = mx-1;
                    ans.push_back(mx-1);
                    v[mx-1]--;
                }
                else if(mx == 1 && v[mx+1])
                {
                    last_used = mx+1;
                    ans.push_back(mx+1);
                    v[mx+1]--;
                }
            }
            else
            {
                if(v[mx+1])
                {
                    last_used = mx+1;
                    ans.push_back(mx+1);
                    v[mx+1]--;
                }
                else if(mx == 2 && v[mx-1])
                {
                    last_used = mx-1;
                    ans.push_back(mx-1);
                    v[mx-1]--;
                }
            }
        }
    }
    bool check = true;
    if(ans.size() != (a+b+c+d)) check = false;
    for(int i=0;i<ans.size()-1;i++)
        if(abs(ans[i] - ans[i+1]) != 1)
            check = false;

    if(check)
    {
        cout << "YES\n";
        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";
    }
    else
    {
        cout << "NO";
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(a > b || d > c || (b > a+c) || (c > b + d))
        cout << "NO";
    else
    {
        cout << "YES\n";
        vector<int> v = {a, b, c, d};
        int last_used = -1;
        while(1)
        {
            int mx = max_element(v.begin(), v.end()) - v.begin();
            if(last_used == mx)
            {
                mx++;
            }
            last_used = mx;
            if(v[mx] <= 0) break;
            while(v[mx] > 0)
            {
                cout << mx << " ";
                v[mx]--;
                if(mx == 1 || mx == 3)
                {
                    if(v[mx-1])
                    {
                        last_used = mx-1;
                        cout << mx-1 << " ";
                        v[mx-1]--;
                    }
                    else if(mx == 1 && v[mx+1])
                    {
                        last_used = mx+1;
                        cout << mx+1 << " ";
                        v[mx+1]--;
                    }
                }
                else
                {
                    if(v[mx+1])
                    {
                        cout << mx+1 << " ";
                        last_used = mx+1;
                        v[mx+1]--;
                    }
                    else if(mx == 2 && v[mx-1])
                    {
                        last_used = mx-1;
                        cout << mx-1 << " ";
                        v[mx-1]--;
                    }
                }
            }
        }

    }
    return 0;

}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(a > b || d > c || (b > a+c) || (c > b + d))
        cout << "NO";
    else
    {
        cout << "YES\n";
        vector<int> v = {a, b, c, d};
        while(1)
        {
            int mx = max_element(v.begin(), v.end()) - v.begin();
            if(v[mx] <= 0) break;
            while(v[mx] > 0)
            {
                cout << mx << " ";
                v[mx]--;
                if(mx == 1 || mx == 3)
                {
                    if(v[mx-1])
                    {
                        cout << mx-1 << " ";
                        v[mx-1]--;
                    }
                    else if(mx == 1 && v[mx+1])
                    {
                        cout << mx+1 << " ";
                        v[mx+1]--;
                    }
                }
                else
                {
                    if(v[mx+1])
                    {
                        cout << mx+1 << " ";
                        v[mx+1]--;
                    }
                    else if(mx == 2 && v[mx-1])
                    {
                        cout << mx-1 << " ";
                        v[mx-1]--;
                    }
                }
            }
        }
         return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    vector<int> v = {a, b, c, d};
    vector<int> ans;
    int last_used = -1;
    while(1)
    {
        int mx = max_element(v.begin(), v.end()) - v.begin();
        if(last_used == mx)
        {
            mx = (mx+1)%4;
        }
        else if(last_used != -1 && abs(last_used - mx) != 1)
        {
            mx++;
        }
        last_used = mx;
        if(mx == 2 && v[mx] == v[mx+1]) mx++;
        if(v[mx] <= 0) break;
        while(v[mx] > 0)
        {
            ans.push_back(mx);
            v[mx]--;
            if(mx == 1 || mx == 3)
            {
                if(v[mx-1])
                {
                    last_used = mx-1;
                    ans.push_back(mx-1);
                    v[mx-1]--;
                }
                else if(mx == 1 && v[mx+1])
                {
                    last_used = mx+1;
                    ans.push_back(mx+1);
                    v[mx+1]--;
                }
            }
            else
            {
                if(v[mx+1])
                {
                    last_used = mx+1;
                    ans.push_back(mx+1);
                    v[mx+1]--;
                }
                else if(mx == 2 && v[mx-1])
                {
                    last_used = mx-1;
                    ans.push_back(mx-1);
                    v[mx-1]--;
                }
            }
        }
    }
    bool check = true;
    if(ans.size() != (a+b+c+d)) check = false;
    for(int i=0;i<ans.size()-1;i++)
        if(abs(ans[i] - ans[i+1]) != 1)
            check = false;

    if(check)
    {
        cout << "YES\n";
        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";
    }
    else
    {
        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";
        cout << "NO";
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(a > b || d > c || (b > a+c) || (c > b + d))
        cout << "NO";
    else
    {
        vector<int> v = {a, b, c, d};
        vector<int> ans;
        int last_used = -1;
        while(1)
        {
            int mx = max_element(v.begin(), v.end()) - v.begin();
            if(last_used == mx)
            {
                mx++;
            }
            else if(abs(last_used - mx) != 1)
            {
                mx++;
            }
            last_used = mx;
            if(mx == 2 && v[mx] == v[mx+1]) mx++;
            if(v[mx] <= 0) break;
            while(v[mx] > 0)
            {
                ans.push_back(mx);
                v[mx]--;
                if(mx == 1 || mx == 3)
                {
                    if(v[mx-1])
                    {
                        last_used = mx-1;
                        ans.push_back(mx-1);
                        v[mx-1]--;
                    }
                    else if(mx == 1 && v[mx+1])
                    {
                        last_used = mx+1;
                        ans.push_back(mx+1);
                        v[mx+1]--;
                    }
                }
                else
                {
                    if(v[mx+1])
                    {
                        last_used = mx+1;
                        ans.push_back(mx+1);
                        v[mx+1]--;
                    }
                    else if(mx == 2 && v[mx-1])
                    {
                        last_used = mx-1;
                        ans.push_back(mx-1);
                        v[mx-1]--;
                    }
                }
            }
        }
        bool check = true;
        if(ans.size() != (a+b+c+d)) check = false;
        for(int i=0;i<ans.size()-1;i++)
            if(abs(ans[i] - ans[i+1]) != 1)
                check = false;

        if(check)
        {
            cout << "YES\n";
            for(int i=0;i<ans.size();i++)
                cout << ans[i] << " ";
        }
        else
            cout << "NO";

    }
    return 0;

}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    vector<int> v = {a, b, c, d};
    vector<int> ans;

    int mx = -1;
    while(1)
    {
        if(mx == -1) mx = max_element(v.begin(), v.end()) - v.begin();
        else if(mx == 1 && v[mx-1])
        {
            mx--;
        }
        else if(mx == 2 && v[mx+1])
            mx++;
        else if(mx == 0 || mx == 1)
            mx++;
        else if(mx == 3 || mx == 2)
            mx--;
        if(v[mx] <= 0) break;
        ans.push_back(mx);
        v[mx]--;
    }
    if(ans.size() + 1 == a + b + c + d)
    {
        mx = max_element(v.begin(), v.end()) - v.begin();
        if(abs(mx - ans[0]) == 1)
        {
            vector<int> temp = {mx};
            cout << ans[0] << "\n";
            ans.insert(ans.begin(), temp.begin(), temp.end());
            cout << ans[0] << " " << ans[1] << "\n";
        }
    }
    bool check = true;
    if(ans.size() != (a+b+c+d)) check = false;
    for(int i=0;i<ans.size()-1;i++)
        if(abs(ans[i] - ans[i+1]) != 1)
            check = false;
    if(check)
    {
        cout << "YES\n";
        for(int i=0;i<ans.size();i++)
            cout << ans[i] << " ";
    }
    else
    {
        cout << "NO";
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if(abs(a+c - b - d) > 1)
    {
        cout << "NO\n";
    }
    else
    {
        vector<int> v(a+b+c+d);
        if(a+c > b+d)
        {
            for(int i=0;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=1;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        else
        {
           for(int i=1;i<v.size();i+=2)
            {
                if(a)
                {
                    v[i] = 0;
                    a--;
                }
                else
                {
                    v[i] = 2;
                    c--;
                }
            }
            for(int i=0;i<v.size();i+=2)
            {
                if(b)
                {
                    v[i] = 1;
                    b--;
                }
                else
                {
                    v[i] = 3;
                    d--;
                }
            }
        }
        bool check = true;
        for(int i=0;i<(int)v.size() - 1;i++)
        {
            if(abs(v[i] - v[i+1]) != 1)
            {
                check = false;
                break;
            }
        }
        if(a+c == b+d && check == false)
        {
            for(int i=0;i<(int)v.size() - 1;i+=2)
            {
                swap(v[i], v[i+1]);
            }
            check = true;
            for(int i=0;i<(int)v.size() - 1;i++)
            {
                if(abs(v[i] - v[i+1]) != 1)
                {
                    check = false;
                    break;
                }
            }
        }
        if(check)
        {
            cout << "YES\n";
            for(int i:v) cout << i << " ";
            cout << "\n";
        }
        else cout << "NO";
    }

    return 0;
}


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <utility>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3f;
const int MAXN=1e5+10;
int T,a[4],ans[MAXN],n;

inline bool dfs(int pos){
	if(a[2]>a[3]+a[1]+1) return false;
	if(a[1]>a[0]+a[2]+1) return false;
	if(a[0]>a[1]+1) return false;
	if(a[3]>a[2]+1) return false;
	if(a[0]<0||a[1]<0||a[2]<0||a[3]<0) return false;
	if(pos>n) return true;
	if(pos==1){
		for(int i=0;i<=3;i++){
			ans[pos]=i;a[i]--;
			if(dfs(pos+1)) return true;
			a[i]++;
		}
		return false;
	}
	if(ans[pos-1]>0){
		ans[pos]=ans[pos-1]-1;a[ans[pos-1]-1]--;
		if(dfs(pos+1)) return true;
		a[ans[pos-1]-1]++;
	}
	if(ans[pos-1]<3){
		ans[pos]=ans[pos-1]+1;a[ans[pos-1]+1]--;
		if(dfs(pos+1)) return true;
		a[ans[pos-1]+1]++;
	}
	return false;
}

int main(){
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	n=a[0]+a[1]+a[2]+a[3];
	if(!dfs(1)) printf("NO\n");
	else{
		printf("YES\n");
		for(int i=1;i<=n;i++) printf("%d ",ans[i]);
		printf("\n");
	}
	return 0;
}


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <utility>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3f;
const int MAXN=1e5+10;
int T,a[4],ans[MAXN],n;
deque<int> que;

int main(){
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	n=a[0]+a[1]+a[2]+a[3];
	int temp=n;
	int now=0;
	for(int i=1;i<=3;i++) if(a[i]>a[now]) now=i;
	que.push_back(now);
	temp--;
	while(temp--){
		int hd=que.front(),tl=que.back();
		if(hd==0) now=1;
		else if(hd==1) now=a[0]>a[2]?0:2;
		else if(hd==2) now=a[1]>a[3]?1:3;
		else now=2;
		if(a[now]>0) {que.push_front(now),a[now]--;continue;}
		if(tl==0) now=1;
		else if(tl==1) now=a[0]>a[2]?0:2;
		else if(tl==2) now=a[1]>a[3]?1:3;
		else now=2;
		if(a[now]>0) {que.push_back(now),a[now--];}
		else {
			printf("NO\n");
			return 0;
		}
	}
	printf("YES\n");
	while(!que.empty()) printf("%d ",que.front()),que.pop_front();
	return 0;
}


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <utility>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3f;
const int MAXN=1e5+10;
int T,a[4],ans[MAXN],n;

inline bool dfs(int pos){
	if(a[0]<0||a[1]<0||a[2]<0||a[3]<0) return false;
	if(pos>n) return true;
	if(pos==1){
		for(int i=0;i<=3;i++){
			ans[pos]=i;a[i]--;
			if(dfs(pos+1)) return true;
			a[i]++;
		}
		return false;
	}
	if(ans[pos-1]>0){
		ans[pos]=ans[pos-1]-1;a[ans[pos-1]-1]--;
		if(dfs(pos+1)) return true;
		a[ans[pos-1]-1]++;
	}
	if(ans[pos-1]<3){
		ans[pos]=ans[pos-1]+1;a[ans[pos-1]+1]--;
		if(dfs(pos+1)) return true;
		a[ans[pos-1]+1]++;
	}
	return false;
}

int main(){
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	n=a[0]+a[1]+a[2]+a[3];
	if(!dfs(1)) printf("NO\n");
	else{
		printf("YES\n");
		for(int i=1;i<=n;i++) printf("%d ",ans[i]);
		printf("\n");
	}
	return 0;
}


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <utility>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3f;
const int MAXN=1e5+10;
int T,a[4],ans[MAXN],n;
deque<int> que;

int main(){
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	n=a[0]+a[1]+a[2]+a[3];
	int temp=n;
	int now=0;
	for(int i=1;i<=3;i++) if(a[i]>a[now]) now=i;
	que.push_back(now);
	a[now]--;
	temp--;
	while(temp--){
		int hd=que.front(),tl=que.back();
		if(hd==0) now=1;
		else if(hd==1) now=a[2]>a[0]?2:0;
		else if(hd==2) now=a[1]>a[3]?1:3;
		else now=2;
		if(a[now]>0) {que.push_front(now),a[now]--;continue;}
		if(tl==0) now=1;
		else if(tl==1) now=a[2]>a[0]?2:0;
		else if(tl==2) now=a[1]>a[3]?1:3;
		else now=2;
		if(a[now]>0) {que.push_back(now),a[now]--;}
		else {
			printf("NO\n");
			return 0;
		}
	}
	printf("YES\n");
	while(!que.empty()) printf("%d ",que.front()),que.pop_front();
	return 0;
}


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <utility>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3f;
const int MAXN=1e5+10;
int T,a[4],ans[MAXN],n;

int main(){
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	n=a[0]+a[1]+a[2]+a[3];
	int temp=n;
	int now=0;
	for(int i=1;i<=3;i++) if(a[i]>a[now]) now=i;
	ans[n]=now;
	a[now]--;
	while(--n){
		if(now==0) now=1;
		else if(now==1) now=a[0]>a[2]?0:2;
		else if(now==2) now=a[1]>a[3]?1:3;
		else now=2;
		ans[n]=now;
		a[now]--;
	}
	if(a[0]==0&&a[1]==0&&a[2]==0&&a[3]==0){
		printf("YES\n");
		for(int i=1;i<=temp;i++) printf("%d ",ans[i]);
		printf("\n");
	}
	else printf("NO\n");
	return 0;
}


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <utility>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3f;
const int MAXN=1e5+10;
int T,a[4],ans[MAXN],n;
deque<int> que;

int main(){
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	n=a[0]+a[1]+a[2]+a[3];
	int temp=n;
	int now=0;
	for(int i=1;i<=3;i++) if(a[i]>a[now]) now=i;
	que.push_back(now);
	temp--;
	while(temp--){
		int hd=que.front(),tl=que.back();
		if(hd==0) now=1;
		else if(hd==1) now=a[0]>a[2]?0:2;
		else if(hd==2) now=a[1]>a[3]?1:3;
		else now=2;
		if(a[now]>0) {que.push_front(now),a[now]--;continue;}
		if(tl==0) now=1;
		else if(tl==1) now=a[0]>a[2]?0:2;
		else if(tl==2) now=a[1]>a[3]?1:3;
		else now=2;
		if(a[now]>0) {que.push_back(now),a[now]--;}
		else {
			printf("NO\n");
			return 0;
		}
	}
	printf("YES\n");
	while(!que.empty()) printf("%d ",que.front()),que.pop_front();
	return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
       if((d>1 && c==0)||(a>1 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";a--;
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else if(b==0 && (abs(d-c)<=1)){
                   cout<<"YES\n";
                   if(d>c){cout<<3<<" ";
                   while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";

                   }
                   else if(d==c){
                    while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"2 ";c--;
                       while(c--){
                       cout<<"3 2 ";
                   }cout<<"\n";
               }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
        if(a==1 && b==0 && c==0 && d==0){
            cout<<"YES\n0\n";return 0;
        }
        if(a==0 && b==0 && c==0 && d==1){
            cout<<"YES\n3\n";return 0;
        }

       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";a--;
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)&&(b>0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else if(b==0 && (abs(d-c)<=1)){
                   cout<<"YES\n";
                   if(d>c){cout<<3<<" ";
                   while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";

                   }
                   else if(d==c){
                    while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"2 ";c--;
                       while(c--){
                       cout<<"3 2 ";
                   }cout<<"\n";
               }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
        if(a==1 && b==0 && c==0 && d==0){
            cout<<"YES\n0\n";return 0;
        }
        if(a==0 && b==0 && c==0 && d==1){
            cout<<"YES\n3\n";return 0;
        }

       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";a--;
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)&&(b>0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";b--;c--;d--;
                       }
                       if(d>0){
                           cout<<"3 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else if(b==0 && (abs(d-c)<=1)){
                   cout<<"YES\n";
                   if(d>c){cout<<3<<" ";
                   while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";

                   }
                   else if(d==c){
                    while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"2 ";c--;
                       while(c--){
                       cout<<"3 2 ";
                   }cout<<"\n";
               }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
        if(a==1 && b==0 && c==0 && d==0){
            cout<<"YES\n0\n";return 0;
        }
        if(a==0 && b==0 && c==0 && d==1){
            cout<<"YES\n3\n";return 0;
        }

       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";a--;
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)&&(b>0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";b--;c--;d--;
                       }
                       if(d>0){
                           cout<<"3 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else if(b==0 && (abs(d-c)<=1)){
                   cout<<"YES\n";
                   if(d>c){cout<<3<<" ";
                   while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";

                   }
                   else if(d==c){
                    while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"2 ";c--;
                       while(c--){
                       cout<<"3 2 ";
                   }cout<<"\n";
               }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
        if(a==1 && b==0 && c==0 && d==0){
            cout<<"YES\n0\n";return 0;
        }
        if(a==0 && b==0 && c==0 && d==1){
            cout<<"YES\n3\n";return 0;
        }

       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";a--;
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else if(b==0 && (abs(d-c)<=1)){
                   cout<<"YES\n";
                   if(d>c){cout<<3<<" ";
                   while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";

                   }
                   else if(d==c){
                    while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"2 ";c--;
                       while(c--){
                       cout<<"3 2 ";
                   }cout<<"\n";
               }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else if(b==0){
                   cout<<"YES\n";
                   if(d>c){cout<<3<<" ";
                   while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";

                   }
                   else if(d==c){
                    while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"2 ";
                       while(c--){
                       cout<<"3 2 ";
                   }cout<<"\n";
               }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#include<iomanip>
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define mul(x,y) ((ll)(x)*(y))%mod
#define tr(c,i) for(auto i = (c).begin(); i != (c).end(); i++)
#define forn(i, n)    for(size_t i = 0; i < size_t(n); i++)
#define FOR(i, x, y)  for(size_t i=size_t(x); i<size_t(y); i++)
#define ROF(i, x, y)  for(size_t i=size_t(x-1); i>=size_t(y); i--)
using namespace std;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i) {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}
template <typename T>
istream& operator>>(istream& os, vector<T>& v)
{
    //int temp;
    for (int i = 0; i < v.size(); ++i) {
        os>>v[i];
    }
    return os;
}
#define vi vector<int>
#define ii pair<int, int>
#define vii vector<ii>
#define vll vector<ll>
ll gcd(ll a, ll b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}
void make_set(int v, vector<int> &parent, vector<int> &size) {
    parent[v] = v;
    size[v] = 1;
}
int find_set(int v,vector<int> &parent) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v],parent);
}
void union_sets(int a, int b,vector<int> &parent, vector<int> &size) {
    a = find_set(a,parent);
    b = find_set(b,parent);
    if (a != b) {
        if (size[a] < size[b])
            swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
}
void dfsvisit(int x,int y, int visited[],int n,const vii &p,int j){
    visited[j]=1;
    forn(i,n){
        if(p[i].first==x || p[i].second==y){
            if(!visited[i]){
                dfsvisit(p[i].first,p[i].second,visited,n,p,i);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(NULL);
    cin.tie(NULL);
    int t;
    //cin>>t;
    t=1;
    while(t--){
        int a,b,c,d; cin>>a>>b>>c>>d;
        if(a==1 && b==0 && c==0 && d==0){
            cout<<"YES\n0\n";return 0;
        }
        if(a==0 && b==0 && c==0 && d==1){
            cout<<"YES\n3\n";return 0;
        }

       if((d>0 && c==0)||(a>0 && b==0) ){
           cout<<"NO\n";
       }
       else{
           if(d==0 && c==0){
               if(abs(b-a)<=1){
                   cout<<"YES\n";
                   if(b>a){cout<<1<<" ";
                   while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";

                   }
                   else if(a==b){
                    while(a--){
                       cout<<"0 1 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"0 ";a--;
                       while(a--){
                       cout<<"1 0 ";
                   }cout<<"\n";
                   }
               }
               else cout<<"NO\n";
           }
           else if(d==0){
               if(abs(a+c-b)<=1){
                   cout<<"YES\n";
                   if(a+c>b){
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";c--;
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else if (a+c == b){
                       cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"\n";
                   }
                   else{
                        cout<<"1 ";
                       while(a--){
                           cout<<"0 1 ";
                       }
                       cout<<"2 ";
                       while(c--){
                           cout<<"1 2 ";
                       }
                       cout<<"1 ";
                       cout<<"\n";

                   }
               }
               else cout<<"NO\n";
           }
           else{
               if((abs(c-d-b+a)<=1)&&(b-a>=0)&&(c-d>=0)){
                   cout<<"YES\n";
                   if(c-d-b+a >0){
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c--){
                           cout<<"3 2 ";
                       }
                       cout<<"\n";
                   }
                   else if(c-d-b+a == 0){
                      while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       //cout<<"3 ";
                       while(c-- && d--){
                           cout<<"3 2 ";
                       }
                       if(c>0){
                           cout<<"3 2 1 ";
                       }
                       cout<<"\n";
                   }
                   else{
                       cout<<"1 ";b--;
                       while(a--){
                           cout<<"0 1 ";b--;
                       }
                       cout<<"2 ";c--;
                       while(b--){
                           cout<<"1 2 ";c--;
                       }
                       cout<<"3 ";
                       while(c--){
                           cout<<"2 3 ";
                       }
                       cout<<"\n";

                   }
               }
               else if(b==0 && (abs(d-c)<=1)){
                   cout<<"YES\n";
                   if(d>c){cout<<3<<" ";
                   while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";

                   }
                   else if(d==c){
                    while(c--){
                       cout<<"2 3 ";
                   }
                   cout<<"\n";
                   }
                   else{
                       cout<<"2 ";c--;
                       while(c--){
                       cout<<"3 2 ";
                   }cout<<"\n";
               }
               }
               else cout<<"NO\n";
           }
       }
    }
    return 0;
}


#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(ll i=a;i<=b;i++)
#define forn(i,n) for(ll i=0;i<n;i++)
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL);
using namespace std;

ll mod=1e9+7;
ll g,h,l;
const int N=100005;
int arr[N];
int a,b,c,d;

int solve(){
    if(a==0){
        if(b==0){
            if(c==0){
                return 3;
            }
        }
        return 2;
    }
    return 1;
}

int main(){

    cin>>a>>b>>c>>d;
    map<int,int> m;
    int offset=0;
    int tot=a+b+c+d;
    auto tot1=tot;
    vector<int> v;
    if(a==0){
        offset++;
        a=b;
        b=c;
        c=d;
        d=0;
    }
    if(a==0){
        offset++;
        a=b;
        b=c;
        c=d;
        d=0;
    }
    if(a==0){
        offset++;
        a=b;
        b=c;
        c=d;
        d=0;
    }
    m[0]=a,m[1]=b,m[2]=c,m[3]=d;
    m[-1]=0;m[4]=0;
    auto m2=m;
    // int cur=solve();
    int cur=0;
    while(tot--){
        v.push_back(cur);
        m[cur]--;
        if(m[cur-1]){
            cur--;
        }
        else if(m[cur+1]){
            cur++;
        }
        else{
            break;
        }
    }
    bool con=false;
    // cout<<"size"<<int(v.size()-2)<<endl;
    for(int i=0;i<=int(v.size()-2);i++){
        // cout<<"inloop"<<endl;
        if(abs(v[i+1]-v[i])!=1){
            con=true;
             break;
        }
    }
    if(con==false &&m[0]==0 and m[1]==0 and m[2]==0 and m[3]==0){
        cout<<"YES"<<endl;
        for(auto i:v){
            cout<<i+offset<<" ";
        }
        return 0;
    }
    cout<<"con "<<con<<endl;
    con=false;
    m=m2;
    // cout<<m[0]<<" "<<m[1]<<" "<<m[2]<<" "<<m[3]<<endl;
    if(m[1]){
        cur=1;
    }
    else{
        cur=0;
    }
    v.clear();
    while(tot1--){
        v.push_back(cur);
        m[cur]--;
        if(m[cur-1]){
            cur--;
        }
        else if(m[cur+1]){
            cur++;
        }
        else{
            break;
        }
    }
    for(int i=0;i<v.size()-2;i++){
        if(abs(v[i+1]-v[i])!=1){
            con=true;
             break;
        }
    }
    if(con==false &&m[0]==0 and m[1]==0 and m[2]==0 and m[3]==0){
        cout<<"YES"<<endl;
        for(auto i:v){
            cout<<i+offset<<" ";
        }
        return 0;
    }
    cout<<"NO";
}


#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(ll i=a;i<=b;i++)
#define forn(i,n) for(ll i=0;i<n;i++)
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL);
using namespace std;

ll mod=1e9+7;
ll g,h,l;
const int N=100005;
int arr[N];
int a,b,c,d;

int solve(){
    if(a==0){
        if(b==0){
            if(c==0){
                return 3;
            }
        }
        return 2;
    }
    return 1;
}

int main(){

    cin>>a>>b>>c>>d;
    map<int,int> m;
    int offset=0;
    int tot=a+b+c+d;
    auto tot1=tot;
    vector<int> v;
    if(a==0){
        offset++;
        a=b;
        b=c;
        c=d;
        d=0;
    }
    if(a==0){
        offset++;
        a=b;
        b=c;
        c=d;
        d=0;
    }
    if(a==0){
        offset++;
        a=b;
        b=c;
        c=d;
        d=0;
    }
    m[0]=a,m[1]=b,m[2]=c,m[3]=d;
    m[-1]=0;m[4]=0;
    auto m2=m;
    // int cur=solve();
    int cur=0;
    while(tot--){
        v.push_back(cur);
        m[cur]--;
        if(m[cur-1]){
            cur--;
        }
        else if(m[cur+1]){
            cur++;
        }
        else{
            break;
        }
    }
    bool con=false;
    // cout<<"size"<<int(v.size()-2)<<endl;
    for(int i=0;i<=int(v.size()-2);i++){
        // cout<<"inloop"<<endl;
        if(abs(v[i+1]-v[i])!=1){
            con=true;
             break;
        }
    }
    if(con==false &&m[0]==0 and m[1]==0 and m[2]==0 and m[3]==0){
        cout<<"YES"<<endl;
        for(auto i:v){
            cout<<i+offset<<" ";
        }
        return 0;
    }
    // cout<<"con "<<con<<endl;
    con=false;
    m=m2;
    // cout<<m[0]<<" "<<m[1]<<" "<<m[2]<<" "<<m[3]<<endl;
    if(m[1]){
        cur=1;
    }
    else{
        cur=0;
    }
    v.clear();
    while(tot1--){
        v.push_back(cur);
        m[cur]--;
        if(m[cur-1]){
            cur--;
        }
        else if(m[cur+1]){
            cur++;
        }
        else{
            break;
        }
    }
    for(int i=0;i<v.size()-2;i++){
        if(abs(v[i+1]-v[i])!=1){
            con=true;
             break;
        }
    }
    if(con==false &&m[0]==0 and m[1]==0 and m[2]==0 and m[3]==0){
        cout<<"YES"<<endl;
        for(auto i:v){
            cout<<i+offset<<" ";
        }
        return 0;
    }
    cout<<"NO";
}