#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;
    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;
    }
    m=m2;
    cur=1;
    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;
    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;
    }
    m=m2;
    if(m[cur]){
        cur=1;
    }
    else{
        cur=0;
    }
    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;
    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;
    }
    m=m2;
    if(m[1]){
        cur=1;
    }
    else{
        cur=0;
    }
    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;
    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;
    }
    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;
    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;
    }
    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;
    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;
    }
    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 ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

ll a[4];

bool check(string ans)
{
	ll cnt[4]={0};
	for(int i=0;i<ans.size();i++)
	{
		cnt[ans[i]-'0']++;
		if(i)
		{
			if(abs(ans[i]-ans[i-1])!=1)
			{
				return false;
			}
		}
		if(i+1<ans.size())
		{
			if(abs(ans[i]-ans[i+1])!=1)
			{
				return false;
			}
		}
	}
	for(int i=0;i<4;i++)
	{
		if(cnt[i]!=a[i])
		{
			return false;
		}
	}
	return true;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	ll tmp=cnt;
	cnt=0;
	for(int i=tmp;i<a[1];i++)
	{
		ans+='1';
		if(a[2]>i-tmp){
			ans+='2';
			cnt++;
		}
	}
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]==0) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	tmp=cnt;
	for(int i=tmp;i<a[1];i++)
	{
		ans+='1';
		if(a[2]>i-tmp){
			ans+='2';
			cnt++;
		}
	}
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}else if(cnt==0)
	{
		ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		if(i==a[3]-1) continue;
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]==0) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a[4];
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		ans+='2';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		ans+='2';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include <bits/stdc++.h>
#define ll long long
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

ll a[4];

bool check(string ans)
{
	ll cnt[4]={0};
	for(int i=0;i<ans.size();i++)
	{
		cnt[ans[i]-'0']++;
		if(i)
		{
			if(abs(ans[i]-ans[i-1])!=1)
			{
				return false;
			}
		}
		if(i+1<ans.size())
		{
			if(abs(ans[i]-ans[i+1])!=1)
			{
				return false;
			}
		}
	}
	for(int i=0;i<4;i++)
	{
		if(cnt[i]!=a[i])
		{
			return false;
		}
	}
	return true;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	ll tmp=cnt;
	cnt=0;
	for(int i=tmp;i<a[1];i++)
	{
		ans+='1';
		if(a[2]>i-tmp){
			ans+='2';
			cnt++;
		}
	}
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]<=i) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	tmp=cnt;
	cnt=0;
	for(int i=tmp;i<a[1];i++)
	{
		ans+='1';
		if(a[2]>i-tmp){
			ans+='2';
			cnt++;
		}
	}
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}else if(cnt==0)
	{
		ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		if(i==a[3]-1) continue;
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]<=i) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a,b,c,d,ori[4];
	cin>>a>>b>>c>>d;
	ori[0]=a,ori[1]=b,ori[2]=c,ori[3]=d;
	if(a<=b+1)
	{
		if(a<=b)
		{
			b-=a;
			b++;
		}else
		{
			b=0;
		}
		if(b<=c+1)
		{
			if(b<=c)
			{
				c-=b;
				c++;
			}else
			{
				c=0;
			}
			if(c<=d+1)
			{
				if(c<=d)
				{
					d-=c;
					d++;
				}else
				{
					d=0;
				}
				if(d==0)
				{
					cout<<"YES\n";
					//print
					for(int i=0;i<ori[0]-1;i++)
					{
						ori[1]--;
						cout<<"0 1 ";
					}
					cout<<"0 ";
					for(int i=0;i<ori[1]-1;i++)
					{
						ori[2]--;
						cout<<"1 2 ";
					}
					cout<<"1 ";
					for(int i=0;i<ori[2]-1;i++)
					{
						ori[3]--;
						cout<<"2 3 ";
					}
					cout<<"2 ";
					if(ori[3])
					{
						cout<<"3";
					}
				}else
				{
					cout<<"NO\n";
				}
			}else
			{
				cout<<"NO";
			}
		}else
		{
			cout<<"NO";
		}
	}else
	{
		cout<<"NO";
	}
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

ll a[4];

bool check(string ans)
{
	ll cnt[4]={0};
	for(int i=0;i<ans.size();i++)
	{
		cnt[ans[i]-'0']++;
		if(i)
		{
			if(abs(ans[i]-ans[i-1])!=1)
			{
				return false;
			}
		}
		if(i+1<ans.size())
		{
			if(abs(ans[i]-ans[i+1])!=1)
			{
				return false;
			}
		}
	}
	for(int i=0;i<4;i++)
	{
		if(cnt[i]!=a[i])
		{
			return false;
		}
	}
	return true;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		if(a[2]!=0)
			ans+='2';
	}
	cnt=a[1]-cnt;
	if(cnt==0)
	{

	}
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]==0) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		if(a[2]!=0)
			ans+='2';
	}
	cnt=a[1]-cnt;
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}else if(cnt==0)
	{
		ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		if(i==a[3]-1) continue;
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]==0) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(!check(ans)) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a[4];
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		ans+='2';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		ans+='2';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}else if(cnt==0)
	{
		ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		if(i==a[3]-1) continue;
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a,b,c,d,ori[4];
	cin>>a>>b>>c>>d;
	ori[0]=a,ori[1]=b,ori[2]=c,ori[3]=d;
	if(a<=b+1)
	{
		if(a<=b)
		{
			b-=a;
			b++;
		}else
		{
			b=0;
		}
		if(b<=c+1)
		{
			if(b<=c)
			{
				c-=b;
				c++;
			}else
			{
				c=0;
			}
			if(c<=d+1)
			{
				if(c<=d)
				{
					d-=c;
				}else
				{
					d=0;
				}
				if(d==0)
				{
					cout<<"YES\n";
					//print
					for(int i=0;i<ori[0]-1;i++)
					{
						ori[1]--;
						cout<<"0 1 ";
					}
					cout<<"0 ";
					for(int i=0;i<ori[1]-1;i++)
					{
						ori[2]--;
						cout<<"1 2 ";
					}
					cout<<"1 ";
					for(int i=0;i<ori[2]-1;i++)
					{
						ori[3]--;
						cout<<"2 3 ";
					}
					cout<<"2 ";
					if(ori[3])
					{
						cout<<"3";
					}
				}else
				{
					cout<<"NO\n";
				}
			}else
			{
				cout<<"NO";
			}
		}else
		{
			cout<<"NO";
		}
	}else
	{
		cout<<"NO";
	}
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a[4];
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		if(a[2]!=0)
			ans+='2';
	}
	cnt=a[1]-cnt;
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		if(a[2]!=0)
			ans+='2';
	}
	cnt=a[1]-cnt;
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}else if(cnt==0)
	{
		ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		if(i==a[3]-1) continue;
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

void print(ll ori[])
{
	for(int i=0;i<ori[0]-1;i++)
	{
		ori[1]--;
		cout<<"0 1 ";
	}
	cout<<"0 ";
	for(int i=0;i<ori[1]-1;i++)
	{
		ori[2]--;
		cout<<"1 2 ";
	}
	cout<<"1 ";
	for(int i=0;i<ori[2]-1;i++)
	{
		ori[3]--;
		cout<<"2 3 ";
	}
	cout<<"2 ";
	if(ori[3])
	{
		cout<<"3";
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a,b,c,d,ori[4];
	cin>>a>>b>>c>>d;
	ori[0]=a,ori[1]=b,ori[2]=c,ori[3]=d;
	if(a<=b+1)
	{
		if(a<=b)
		{
			b-=a;
			b++;
		}else
		{
			b=0;
			if(c==0&&d==0)
			{
				cout<<"YES\n";
				print(ori);
			}else
			{
				cout<<"NO";
			}
		}
		if(b<=c+1)
		{
			if(b<=c)
			{
				c-=b;
				c++;
			}else
			{
				c=0;
				if(d==0)
				{
					cout<<"YES\n";
					print(ori);
				}else
				{
					cout<<"NO";
				}
			}
			if(c<=d+1)
			{
				if(c<=d)
				{
					d-=c;
				}else
				{
					d=0;
				}
				if(d==0)
				{
					cout<<"YES\n";
					print(ori);
				}else
				{
					cout<<"NO\n";
				}
			}else
			{
				cout<<"NO";
			}
		}else
		{
			cout<<"NO";
		}
	}else
	{
		cout<<"NO";
	}
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a,b,c,d,ori[4];
	cin>>a>>b>>c>>d;
	ori[0]=a,ori[1]=b,ori[2]=c,ori[3]=d;
	if(a<=b+1)
	{
		if(a<=b)
		{
			b-=a;
		}else
		{
			b=0;
		}
		if(b<=c+1)
		{
			if(b<=c)
			{
				c-=b;
			}else
			{
				c=0;
			}
			if(c<=d+1)
			{
				if(c<=d)
				{
					d-=c;
				}else
				{
					d=0;
				}
				if(d==0)
				{
					cout<<"YES\n";
					//print
					for(int i=0;i<ori[0]-1;i++)
					{
						ori[1]--;
						cout<<"0 1 ";
					}
					cout<<"0 ";
					for(int i=0;i<ori[1]-1;i++)
					{
						ori[2]--;
						cout<<"1 2 ";
					}
					cout<<"1 ";
					for(int i=0;i<ori[2]-1;i++)
					{
						ori[3]--;
						cout<<"2 3 ";
					}
					cout<<"2 ";
					if(ori[3])
					{
						cout<<"3";
					}
				}else
				{
					cout<<"NO\n";
				}
			}else
			{
				cout<<"NO";
			}
		}else
		{
			cout<<"NO";
		}
	}else
	{
		cout<<"NO";
	}
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a[4];
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		ans+='2';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		ans+='2';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		if(i==a[3]-1) continue;
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 100000000000
#define MOD 1000000007
#define maxn 1000010
#define pb push_back
#define pll pair<ll,ll>
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define vii vector<pll>
#define vvpll vector<vector<pll> >
#define vpll vector<pll>
#define all(v) (v).begin(),(v).end()

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	ll a[4];
	cin>>a[0]>>a[1]>>a[2]>>a[3];
	bool nz=0;
	for(int i=0;i<4;i++)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j<4;j++){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	nz=0;
	for(int i=3;i>=0;--i)
	{
		if(a[i]==0&&nz==1){
			for(int j=i;j>=0;--j){
				if(a[j]!=0){
					cout<<"NO\n";
					return 0;
				}
			}
		}
		if(a[i]!=0) nz=1;
	}
	ll na[4]={0},left=-1,right=-1;
	for(int i=0;i<4;i++)
	{
		if(a[i]!=0&&left==-1)
		{
			left=i;
		}
		if(a[i]==0&&right==-1&&left!=-1)
		{
			right=i-1;
		}
	}
	if(left!=-1&&right==-1)
	{
		right=3;
	}
	for(int i=left;i<=right;i++)
	{
		na[i-left]=a[i];
	}
	for(int i=0;i<4;i++)
	{
		a[i]=na[i];
	}
	ll diff=left;
	//1...2
	string ans;
	ll cnt=0;
	bool ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		if(a[2]!=0)
			ans+='2';
	}
	cnt=a[1]-cnt;
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2])
		{
			ok=false;
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]==0) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//1..3
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='1';
		ans+='0';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='1';
		if(a[2]!=0)
			ans+='2';
	}
	cnt=a[1]-cnt;
	if(a[2]==0)
		cnt=0;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(cnt!=a[2]) ok=false;
	}else if(cnt==0)
	{
		ok=false;
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='3';
		if(i==a[3]-1) continue;
		ans+='2';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(cnt!=a[2]) ok=false;
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	//0...2
	ans.clear();
	cnt=0;
	ok=true;
	for(int i=0;i<a[0];i++)
	{
		ans+='0';
		if(a[1]==0) continue;
		ans+='1';
		cnt++;
		if(cnt>a[1])
		{
			ok=false;
		}
	}
	for(int i=cnt;i<a[1];i++)
	{
		ans+='2';
		ans+='1';
	}
	cnt=a[1]-cnt;
	if(cnt>a[2])
	{
		ok=false;
	}
	if(a[3]==0)
	{
		if(abs(a[2]-cnt)>1)
		{
			ok=false;
		}else{
			if(a[2]!=cnt)
			{
				ans+='2';
				cnt++;
			}
		}
	}
	for(int i=0;i<a[3];i++)
	{
		ans+='2';
		ans+='3';
		cnt++;
		if(cnt>a[2])
		{
			ok=false;
		}
	}
	if(abs(cnt-a[2])>1)
	{
		ok=false;
	}else
	{
		if(cnt!=a[2])
		{
			ans+='2';
		}
	}
	if(ok==true){
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)
		{
			cout<<(char)(ans[i]+diff)<<" ";
		}
		return 0;
	}
	cout<<"NO\n";
}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot,start=1;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	if(a==1&&b==0&&c==0&&d==0) {
		printf("YES\n0\n");
		return 0;
    }
	if(a==0&&b==1&&c==0&&d==0) {
		printf("YES\n1\n");
		return 0;
	}
	if(a==0&&b==0&&c==1&&d==0) {
		printf("YES\n2\n");
		return 0;
	}
	if(a==0&&b==0&&c==0&&d==1) {
		printf("YES\n3\n");
		return 0;
	}
	for(int i=1; i<=2*min(a,b); i++)
		if(i&1) ans[++tot]=0;
		else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	if(c<b+d&&b>0)  {
		start=0,ans[0]=1,b--;
	}
	if(a==1&&c==0&&d==0) ans[++tot]=0,a--;
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	if(c==1&&d==0) ans[++tot]=1,c--;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	if(d==1&&ans[1]==2&&start==1) ans[0]=3,d--,start=0;
	//cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=start; i<=tot; i++) printf("%d ",ans[i]);
	} else printf("NO\n");

}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot,start=1;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	if(a==1&&b==0&&c==0&&d==0) {
		printf("YES\n0\n");
		return 0;
    }
	if(a==0&&b==1&&c==0&&d==0) {
		printf("YES\n1\n");
		return 0;
	}
	if(a==0&&b==0&&c==1&&d==0) {
		printf("YES\n2\n");
		return 0;
	}
	if(a==0&&b==0&&c==0&&d==1) {
		printf("YES\n3\n");
		return 0;
	}
	for(int i=1; i<=2*min(a,b); i++)
		if(i&1) ans[++tot]=0;
		else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	if(c<b+d&&b>0)  {
		start=0,ans[0]=1,b--;
	}
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	if(d==1&&ans[1]==2&&start==1) ans[0]=3,d--,start=0;
	//cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=start; i<=tot; i++) printf("%d ",ans[i]);
	} else printf("NO\n");

}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot,start=1;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	for(int i=1; i<=2*min(a,b); i++)
		if(i&1) ans[++tot]=0;
		else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	if(c<b+d&&b>0)  {
		start=0,ans[0]=1,b--;
	}
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	if(d==1&&ans[1]==2&&start==1) ans[0]=3,d--,start=0;
	//cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=start; i<=tot; i++) printf("%d ",ans[i]);
	} else printf("NO\n");

}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	if(d>c||c>b+d||b>a+c||a>b) {
		printf("NO\n");
		return 0;
	}
	for(int i=1; i<=2*min(a,b); i++)
	    if(i&1) ans[++tot]=0;
	    else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=1; i<=tot; i++) printf("%d ",ans[i]);
	}
	else printf("NO\n");

}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot,start=1;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	if(d>c||c>b+d||b>a+c||a>b) {
		printf("NO\n");
		return 0;
	}
	for(int i=1; i<=2*min(a,b); i++)
		if(i&1) ans[++tot]=0;
		else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	if(c<b+d)  {
		start=0,ans[0]=1,b--;
	}
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	//cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=start; i<=tot; i++) printf("%d ",ans[i]);
	} else printf("NO\n");

}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int ans[100100],tot;
int main() {
	int a[4],b[4];
	scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
	for(int i=0; i<=3; i++) {
		int id=i;
		tot=0;
		for(int j=0; j<=3; j++) b[j]=a[j];
		while(1) {
			if(id>0&&b[id-1]) {
				id--;
				b[id]--;
				ans[++tot]=id;
			}
			else if(id<3&&b[id+1]) {
				id++;
				b[id]--;
				ans[++tot]=id;
			}
			else break;
		}
		if(tot==a[0]+a[1]+a[2]+a[3]) break;
		else tot=0;
	}
	if(!tot) printf("NO\n");
	else {
		printf("YES\n");
		for(int i=1; i<=tot; i++) printf("%d ",ans[i]);
	}
}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	if(d>c||c>b+d||b>a+c||a>b) {
		printf("NO\n");
		return 0;
	}
	for(int i=1; i<=2*min(a,b); i++)
	    if(i&1) ans[++tot]=0;
	    else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=1; i<=tot; i++) printf("%d ",ans[i]);
	}
	else if(a==0&&b==1&&c==0&&d==0) {
		printf("YES\n");
		ans[0]=1;
		for(int i=1; i<=tot; i++) printf("%d ",ans[i]);
	}
	else printf("NO\n");

}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot,start=1;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	if(d>c||c>b+d||b>a+c||a>b) {
		printf("NO\n");
		return 0;
	}
	for(int i=1; i<=2*min(a,b); i++)
	    if(i&1) ans[++tot]=0;
	    else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	if(b==1) start=0,ans[0]=1,b--;
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	//cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=start; i<=tot; i++) printf("%d ",ans[i]);
	}
	else printf("NO\n");

}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<bitset>
#include<algorithm>
#include<iomanip>
#include<stack>
using namespace std;
int a,b,c,d,num=0;
int ans[100100],tot,start=1;
int main() {
	scanf("%d%d%d%d",&a,&b,&c,&d);
	if(d>c||c>b+d||b>a+c||a>b) {
		printf("NO\n");
		return 0;
	}
	for(int i=1; i<=2*min(a,b); i++)
	    if(i&1) ans[++tot]=0;
	    else ans[++tot]=1;
	int tmp=min(a,b);
	b-=tmp,a-=tmp;
	if(b>0) start=0,ans[0]=1,b--;
	for(int i=1; i<=2*min(b,c); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=1;
	}
	tmp=min(b,c);
	c-=tmp,b-=tmp;
	for(int i=1; i<=2*min(c,d); i++) {
		if(i&1) ans[++tot]=2;
		else ans[++tot]=3;
	}
	tmp=min(c,d);
	d-=tmp,c-=tmp;
	if(c==1) ans[++tot]=2,c--;
	if(a==b&&b==c&&c==d&&d==0) {
		printf("YES\n");
		for(int i=start; i<=tot; i++) printf("%d ",ans[i]);
	}
	else printf("NO\n");

}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[5] , arr2[5]={} , sum=0 , tmp;
    vector<ll> ans;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    arr[4] = 0;

    for(int i=0; i<4; i++)
        arr2[i] = arr[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr2[i] , arr2[i+1]);
        arr2[i] -= tmp , arr2[i+1] -= tmp;
    }

    for(int i=0; i<4; i++)
        sum += arr2[i];

    if (sum > 1) return cout << "NO\n" , 0;

    for(int i=0; i<3; i++)
    {
        tmp = min(arr[i] , arr[i+1]);
        arr[i] -= tmp , arr[i+1] -= tmp;

        int idx = i , idx2 = i+1;
        if (ans.size() && ans[ans.size()-1] == idx) swap(idx , idx2);

        while(tmp--)
        {
            ans.push_back(idx) , ans.push_back(idx2);
        }
    }

    int idx = -1;
    for(int i=0; i<4; i++)
        if (arr2[i]) {idx=i; break;}

    if (idx != -1)
    {
        if (!ans.size()) return cout << idx << "\n" , 0;
        if (abs(ans[0] - idx) != 1 && abs(ans[ans.size()-1] - idx) != 1) return cout << "NO\n" , 0;
        if ( abs(ans[0] - idx) == 1 ) ans.insert(ans.begin() , idx);
        else ans.push_back(idx);
    }

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

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[4] , arr2[4] , sum=0 , tmp;
    vector<ll> ans;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    for(int i=0; i<4; i++)
        arr2[i] = arr[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr2[i] , arr2[i+1]);
        arr2[i] -= tmp , arr2[i+1] -= tmp;
    }

    for(int i=0; i<4; i++)
        sum += arr2[i];

    if (sum > 1) return cout << "NO\n" , 0;

    for(int i=0; i<3; i++)
    {
        tmp = min(arr[i] , arr[i+1]);
        arr[i] -= tmp , arr[i+1] -= tmp;

        if (arr2[i] && tmp)
        {
            while(tmp--)
            {
                ans.push_back(i) , ans.push_back(i+1);
            }
            ans.push_back(i) , arr[i]--;

            arr2[i] = 0;
        }
        else if (arr2[i+1] && tmp)
        {
            while(tmp--)
            {
                ans.push_back(i+1) , ans.push_back(i);
            }

            ans.push_back(i+1) , arr[i+1]--;
            arr2[i+1] = 0;
        }
        else
        {
            if (ans.size() && ans[ans.size()-1] == i)
            {
                while(tmp--)
                {
                    ans.push_back(i+1) , ans.push_back(i);
                }
            }
            else
            {
                while(tmp--)
                {
                    ans.push_back(i) , ans.push_back(i+1);
                }
            }

        }
    }

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

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[5] , arr2[5]={} , sum=0 , tmp;
    vector<ll> ans;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    arr[4] = 0;

    for(int i=0; i<4; i++)
        arr2[i] = arr[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr2[i] , arr2[i+1]);
        arr2[i] -= tmp , arr2[i+1] -= tmp;
    }

    for(int i=0; i<4; i++)
        sum += arr2[i];

    if (sum > 1) return cout << "NO\n" , 0;

    for(int i=0; i<3; i++)
    {
        tmp = min(arr[i] , arr[i+1]);
        arr[i] -= tmp , arr[i+1] -= tmp;

        int idx = i , idx2 = i+1;
        if (ans.size() && ans[ans.size()-1] == idx) swap(idx , idx2);

        while(tmp--)
        {
            ans.push_back(idx) , ans.push_back(idx2);
        }
    }

    int idx = -1;
    for(int i=0; i<4; i++)
        if (arr2[i]) {idx=i; break;}

    if (idx != -1)
    {
        if (abs(ans[0] - idx) != 1 && abs(ans[ans.size()-1] - idx) != 1) return cout << "NO\n" , 0;
        if ( abs(ans[0] - idx) == 1 ) ans.insert(ans.begin() , idx);
        else ans.push_back(idx);
    }

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

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[4] , arr2[4] , sum=0 , tmp;
    vector<ll> ans;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    for(int i=0; i<4; i++)
        arr2[i] = arr[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr2[i] , arr2[i+1]);
        arr2[i] -= tmp , arr2[i+1] -= tmp;
    }

    for(int i=0; i<4; i++)
        sum += arr2[i];

    if (sum > 1) return cout << "NO\n" , 0;

    if (arr2[0] && arr[2]) return cout << "NO\n" , 0;
    if (arr2[3] && arr[1]) return cout << "NO\n" , 0;

    for(int i=0; i<3; i++)
    {
        tmp = min(arr[i] , arr[i+1]);
        arr[i] -= tmp , arr[i+1] -= tmp;

        if (arr2[i] && tmp)
        {
            while(tmp--)
            {
                ans.push_back(i) , ans.push_back(i+1);
            }
            ans.push_back(i) , arr[i]--;

            arr2[i] = 0;
        }
        else if (arr2[i+1] && tmp)
        {
            while(tmp--)
            {
                ans.push_back(i+1) , ans.push_back(i);
            }

            ans.push_back(i+1) , arr[i+1]--;
            arr2[i+1] = 0;
        }
        else
        {
            if (ans.size() && ans[ans.size()-1] == i)
            {
                while(tmp--)
                {
                    ans.push_back(i+1) , ans.push_back(i);
                }
            }
            else
            {
                while(tmp--)
                {
                    ans.push_back(i) , ans.push_back(i+1);
                }
            }

        }
    }

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

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[5] , arr2[5]={} , sum=0 , tmp , b=0 , b2=0 , b3=0;

    vector<ll> fr , sc , th;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    if (arr[0] || arr[1]) b=1;
    if (arr[2] || arr[3]) b2=1;

    tmp = min(arr[0] , arr[1]);
    arr[0] -= tmp , arr[1] -= tmp;
    while(tmp--)
    {
        fr.push_back(0) , fr.push_back(1);
    }

    tmp = min(arr[2] , arr[3]);
    arr[2] -= tmp , arr[3] -= tmp;
    while(tmp--)
    {
        sc.push_back(2) , sc.push_back(3);
    }

    if (arr[0])
    {
        if (b2 || arr[0] > 1) return cout << "NO\n" , 0;
        fr.push_back(0);
        for(int i=0; i<fr.size(); i++)
            cout << fr[i] << " ";
        return 0;
    }

    if (arr[3])
    {
        if (b || arr[3] > 1) return cout << "NO\n" , 0;
        sc.insert(sc.begin() , 3);
        for(int i=0; i<sc.size(); i++)
            cout << sc[i] << " ";
        return 0;
    }

    tmp = min(arr[1] , arr[2]);
    arr[1] -= tmp , arr[2] -= tmp;
    while(tmp--)
    {
        th.push_back(2) , th.push_back(1);
    }

    if (arr[1] > 1 || arr[2] > 1) return cout << "NO\n" , 0;

    cout << "YES\n";

    if (arr[1]) fr.insert(fr.begin() , 1);
    if (arr[2]) sc.push_back(2);

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[4] , arr2[4] , sum=0 , tmp;
    vector<ll> ans;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    for(int i=0; i<4; i++)
        arr2[i] = arr[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr2[i] , arr2[i+1]);
        arr2[i] -= tmp , arr2[i+1] -= tmp;
    }

    for(int i=0; i<4; i++)
        sum += arr2[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr[i] , arr[i+1]);
        arr[i] -= tmp , arr[i+1] -= tmp;

        if (arr2[i] && tmp)
        {
            while(tmp--)
            {
                ans.push_back(i) , ans.push_back(i+1);
            }
            ans.push_back(i) , arr[i]--;

            arr2[i] = 0;
        }
        else if (arr2[i+1] && tmp)
        {
            while(tmp--)
            {
                ans.push_back(i+1) , ans.push_back(i);
            }

            ans.push_back(i+1) , arr[i+1]--;
            arr2[i+1] = 0;
        }
        else
        {
            if (ans.size() && ans[ans.size()-1] == i)
            {
                while(tmp--)
                {
                    ans.push_back(i+1) , ans.push_back(i);
                }
            }
            else
            {
                while(tmp--)
                {
                    ans.push_back(i) , ans.push_back(i+1);
                }
            }

        }
    }

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

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[5] , arr2[5]={} , sum=0 , tmp , b=0 , b2=0 , b3=0;

    vector<ll> fr , sc , th;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    if (arr[0] || arr[1]) b=1;
    if (arr[2] || arr[3]) b2=1;

    tmp = min(arr[0] , arr[1]);
    arr[0] -= tmp , arr[1] -= tmp;
    while(tmp--)
    {
        fr.push_back(0) , fr.push_back(1);
    }

    tmp = min(arr[2] , arr[3]);
    arr[2] -= tmp , arr[3] -= tmp;
    while(tmp--)
    {
        sc.push_back(2) , sc.push_back(3);
    }

    if (arr[0])
    {
        if (b2 || arr[0] > 1) return cout << "NO\n" , 0;
        fr.push_back(0);
        cout << "YES\n";
        for(int i=0; i<fr.size(); i++)
            cout << fr[i] << " ";
        return 0;
    }

    if (arr[3])
    {
        if (b || arr[3] > 1) return cout << "NO\n" , 0;
        sc.insert(sc.begin() , 3);
        cout << "YES\n";
        for(int i=0; i<sc.size(); i++)
            cout << sc[i] << " ";
        return 0;
    }

    tmp = min(arr[1] , arr[2]);
    arr[1] -= tmp , arr[2] -= tmp;
    while(tmp--)
    {
        th.push_back(2) , th.push_back(1);
    }

    if (arr[1] > 1 || arr[2] > 1) return cout << "NO\n" , 0;

    cout << "YES\n";

    if (arr[1]) fr.insert(fr.begin() , 1);
    if (arr[2]) sc.push_back(2);

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[5] , arr2[5]={} , sum=0 , tmp , b=0 , b2=0 , b3=0;

    vector<ll> fr , sc , th;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    if (arr[0] || arr[1]) b=1;
    if (arr[2] || arr[3]) b2=1;

    tmp = min(arr[0] , arr[1]);
    arr[0] -= tmp , arr[1] -= tmp;
    while(tmp--)
    {
        fr.push_back(0) , fr.push_back(1);
    }

    tmp = min(arr[2] , arr[3]);
    arr[2] -= tmp , arr[3] -= tmp;
    while(tmp--)
    {
        sc.push_back(2) , sc.push_back(3);
    }

    if (arr[0])
    {
        if (b2) return cout << "NO\n" , 0;
        fr.push_back(0);
        for(int i=0; i<fr.size(); i++)
            cout << fr[i] << " ";
        return 0;
    }

    if (arr[3])
    {
        if (b) return cout << "NO\n" , 0;
        sc.insert(sc.begin() , 3);
        for(int i=0; i<sc.size(); i++)
            cout << sc[i] << " ";
        return 0;
    }

    tmp = min(arr[1] , arr[2]);
    arr[1] -= tmp , arr[2] -= tmp;
    while(tmp--)
    {
        th.push_back(2) , th.push_back(1);
    }

    if (arr[1] > 1 || arr[2] > 1) return cout << "NO\n" , 0;

    cout << "YES\n";

    if (arr[1]) fr.insert(fr.begin() , 1);
    if (arr[2]) sc.push_back(2);

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[5] , arr2[5]={} , sum=0 , tmp;
    vector<ll> ans;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    arr[4] = 0;

    for(int i=0; i<4; i++)
        arr2[i] = arr[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr2[i] , arr2[i+1]);
        arr2[i] -= tmp , arr2[i+1] -= tmp;
    }

    for(int i=0; i<4; i++)
        sum += arr2[i];

    if (sum > 1) return cout << "NO\n" , 0;

    for(int i=0; i<4; i++)
    {
        tmp = min(arr[i] , arr[i+1]);
        arr[i] -= tmp , arr[i+1] -= tmp;

        int idx = i , idx2 = i+1;
        if (ans.size() && ans[ans.size()-1] == idx) swap(idx , idx2);

        while(tmp--)
        {
            ans.push_back(idx) , ans.push_back(idx2);
        }
    }

    int idx = -1;
    for(int i=0; i<4; i++)
        if (arr2[i]) {idx=i; break;}

    if (idx != -1)
    {
        if (abs(ans[0] - idx) != 1 && abs(ans[ans.size()-1] - idx) != 1) return cout << "NO\n" , 0;
        if ( abs(ans[0] - idx) == 1 ) ans.insert(ans.begin() , idx);
        else ans.push_back(idx);
    }

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

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

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define f first
#define s second

int main()
{
    ll arr[5] , arr2[5]={} , sum=0 , tmp;
    vector<ll> ans;
    cin >> arr[0] >> arr[1] >> arr[2] >> arr[3];

    arr[4] = 0;

    for(int i=0; i<4; i++)
        arr2[i] = arr[i];

    for(int i=0; i<3; i++)
    {
        tmp = min(arr2[i] , arr2[i+1]);
        arr2[i] -= tmp , arr2[i+1] -= tmp;
    }

    for(int i=0; i<4; i++)
        sum += arr2[i];

    if (sum > 1) return cout << "NO\n" , 0;

    for(int i=0; i<4; i++)
    {
        tmp = min(arr[i] , arr[i+1]);
        arr[i] -= tmp , arr[i+1] -= tmp;

        int idx = i , idx2 = i+1;
        if (ans.size() && ans[ans.size()-1] == idx) swap(idx , idx2);

        while(tmp--)
        {
            ans.push_back(idx) , ans.push_back(idx2);
        }
    }

    int idx = -1;
    for(int i=0; i<4; i++)
        if (arr2[i]) {idx=i; break;}

    if (idx != -1)
    {
        if (abs(ans[0] - idx) != 1 && abs(ans[ans.size()-1] - idx) != 1) return cout << "NO\n" , 0;
    }

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

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

    return 0;
}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;

    while(a && b){
        if(a >= b){
            v.push_back(0);
            v.push_back(1);
        }else{
            v.push_back(1);
            v.push_back(0);
        }
        a--;
        b--;
    }
    if(a){
        if(v.empty() || (!v.empty() && v.back() == 1)){
            a--;
            v.push_back(0);
        }
    }
    if (b){
        if((!v.empty() && v.back() == 0)){
            b--;
            v.push_back(1);
        }else if(v.empty() && b > c){
            b--;
            v.push_back(1);
        }
    }
    while(ok){
        if(v.size() == sum) break;
        if(!v.empty()){
            if(v.back() == 0){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                ok = false;
            }else if(v.back() == 1){
                if(a){
                    a--;
                    v.push_back(0);
                    continue;
                }
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }else if(v.back() == 2){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                if(d){
                    d--;
                    v.push_back(3);
                    continue;
                }
                ok = false;
            }else{
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }
        }else{
            if(a){
                if(a >= b){
                    v.push_back(0);
                    a--;
                }else if(b){
                    v.push_back(1);
                    b--;
                }
            }
            if(b){
                if(b >= c){
                    v.push_back(1);
                    b--;
                }else if(c){
                    v.push_back(2);
                    c--;
                }
                continue;
            }
            if(c){
                if(c >= d){
                    v.push_back(2);
                    c--;
                }else if(d){
                    v.push_back(3);
                    d--;
                }
            }
            if(d){
                v.push_back(3);
                d--;
            }
        }
    }

    if(!ok || v.size() != sum || (a||b||c||d)){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;

    while(a && b){
        if(a >= b){
            v.push_back(0);
            v.push_back(1);
        }else{
            v.push_back(1);
            v.push_back(0);
        }
        a--;
        b--;
    }
    if(a){

        if(v.empty() || (!v.empty() && v.back() == 1)){
            a--;
            v.push_back(0);
        }

    }
    if (b){
        if((!v.empty() && v.back() == 0)){
            b--;
            v.push_back(1);
        }else if(v.empty() && b > c){
            b--;
            v.push_back(1);
        }
    }
    while(ok){
        if(v.size() == sum) break;
        if(!v.empty()){
            if(v.back() == 0){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                ok = false;
            }else if(v.back() == 1){
                if(a){
                    a--;
                    v.push_back(0);
                    continue;
                }
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }else if(v.back() == 2){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                if(d){
                    d--;
                    v.push_back(3);
                    continue;
                }
                ok = false;
            }else{
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }
        }else{
            if(b){
                if(b >= c){
                    v.push_back(1);
                    b--;
                }else if(c){
                    v.push_back(2);
                    c--;
                }
                continue;
            }
            if(c){
                if(c >= d){
                    v.push_back(2);
                    c--;
                }else if(d){
                    v.push_back(3);
                    d--;
                }
            }
            if(d){
                v.push_back(3);
                d--;
            }
        }
    }

    if(!ok || v.size() != sum || (a||b||c||d)){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;

    while(a && b){
        if(a >= b){
            v.push_back(0);
            v.push_back(1);
        }else{
            v.push_back(1);
            v.push_back(0);
        }
        a--;
        b--;
    }
    if(a){

        if(v.empty() || (!v.empty() && v.back() == 1)){
            a--;
            v.push_back(0);
        }

    }
    if (b){

        if(v.empty() || (!v.empty() && v.back() == 0)){
            b--;
            v.push_back(1);
        }

    }
    while(ok){
        if(v.size() == sum) break;
        if(!v.empty()){
            if(v.back() == 0){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                ok = false;
            }else if(v.back() == 1){
                if(a){
                    a--;
                    v.push_back(0);
                    continue;
                }
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }else if(v.back() == 2){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                if(d){
                    d--;
                    v.push_back(3);
                    continue;
                }
                ok = false;
            }else{
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }
        }else{
            if(abs(c-d) > 1){
                ok = false;
            }
            if(c > d){
                v.push_back(2);
                c--;
            }else{
                v.push_back(3);
                d--;
            }
        }
    }

    if(!ok || v.size() != sum || (a||b||c||d)){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;

    if(abs(a-b) <= 1){
        while(a && b){
            if(a >= b){
                v.push_back(0);
                v.push_back(1);
            }else{
                v.push_back(1);
                v.push_back(0);
            }
            a--;
            b--;
        }
        if(a) v.push_back(0);
        if(b) v.push_back(1);
    }else{
        ok = false;
    }
    while(true){
        if(v.size() == sum) break;
        if(!v.empty()){
            if(v.back() == 0){
                ok = false;
                break;
            }else if(v.back() == 1){
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }else{
                    ok = false;
                    break;
                }
            }else if(v.back() == 2){
                if(d){
                    d--;
                    v.push_back(3);
                    continue;
                }else{
                    ok = false;
                    break;
                }
            }else{
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }else{
                    ok = false;
                    break;
                }
            }
        }else{
            if(abs(c-d) > 1){
                ok = false;
                break;
            }
            if(c > d){
                v.push_back(2);
                c--;
            }else{
                v.push_back(3);
                d--;
            }
        }
    }

    if(!ok || v.size() != sum){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

vector<int>c(4);
vector<int>t(4);
vector<int>ans;
bool solve(int i){
    int cur = i;
    while(t[cur] && cur < 4){
        ans.push_back(cur);
        t[cur]-=1;
        cur+=(cur>0&&t[cur-1] ? -1:1);
    }
    if(!t[0] && !t[1] && !t[2] && !t[3]){
        cout << "YES" << endl;
        for(int i=0;i<ans.size();i++){
            cout << ans[i] << " ";
        }
        cout << endl;
        return true;
    }
    return false;
}
int main(){
    fast;
    for(int i=0;i<4;i++){
        cin >> c[i];
    }
    for(int i=0;i<4;i++){
        t = c;
        ans.clear();
        if (solve(i)){
            return 0;
        }
    }
    cout << "NO" << endl;
}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;
    while(a){
        v.push_back(0);
        v.push_back(1);
        a--;
        b--;
        if(b == 0 && a > 1){
            ok = false;
            break;
        }
    }
    if (a == 1){
        a = 0;
        v.push_back(0);
    }
    while(b && c){
        if(v.back() == 1){
            v.push_back(2);
            v.push_back(1);
        }else{
            v.push_back(1);
            v.push_back(2);
        }

        b--;
        c--;
        if(c == 0 && b > 1){
            ok = false;
            break;
        }
    }
    if (b == 1){
        b = 0;
        v.push_back(1);
    }
    while(c && d){
        if(v.back() == 2){
            v.push_back(3);
            v.push_back(2);
        }else{
            v.push_back(2);
            v.push_back(3);
        }
        c--;
        d--;
        if(d == 0 && c > 1){
            ok = false;
            break;
        }
    }
    if(c == 1){
        c = 0;
        v.push_back(2);
    }
    if(!ok || v.size() != sum){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;

    if(abs(a-b) <= 1){
        while(a && b){
            if(a >= b){
                v.push_back(0);
                v.push_back(1);
            }else{
                v.push_back(1);
                v.push_back(0);
            }
            a--;
            b--;
        }
        if(a){
            a--;
          v.push_back(0);
        }
        if (b){
            b--;
           v.push_back(1);
        }
    }else{
        ok = false;
    }
    while(ok){
        if(v.size() == sum) break;
        if(!v.empty()){
            if(v.back() == 0){
                ok = false;
            }else if(v.back() == 1){
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }else{
                    ok = false;
                }
            }else if(v.back() == 2){
                if(d){
                    d--;
                    v.push_back(3);
                    continue;
                }else{
                    ok = false;
                }
            }else{
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }else{
                    ok = false;
                }
            }
        }else{
            if(abs(c-d) > 1){
                ok = false;
            }
            if(c > d){
                v.push_back(2);
                c--;
            }else{
                v.push_back(3);
                d--;
            }
        }
    }

    if(!ok || v.size() != sum || (a||b||c||d)){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;

    if(abs(a-b) <= 1){
        while(a && b){
            if(a >= b){
                v.push_back(0);
                v.push_back(1);
            }else{
                v.push_back(1);
                v.push_back(0);
            }
            a--;
            b--;
        }
        if(a) v.push_back(0);
        if(b) v.push_back(1);
    }else{
        ok = false;
    }
    while(ok){
        if(v.size() == sum) break;
        if(!v.empty()){
            if(v.back() == 0){
                ok = false;
            }else if(v.back() == 1){
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }else{
                    ok = false;
                }
            }else if(v.back() == 2){
                if(d){
                    d--;
                    v.push_back(3);
                    continue;
                }else{
                    ok = false;
                }
            }else{
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }else{
                    ok = false;
                }
            }
        }else{
            if(abs(c-d) > 1){
                ok = false;
            }
            if(c > d){
                v.push_back(2);
                c--;
            }else{
                v.push_back(3);
                d--;
            }
        }
    }

    if(!ok || v.size() != sum){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<stdio.h>
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define fast cin.tie(NULL);ios::sync_with_stdio(false)
#define INF 987654321
#define MOD 1000000003

#define ll long long

int main(){
    fast;
    int a,b,c,d;
    int sum;
    cin >> a >> b >> c >> d;
    sum = a+b+c+d;
    vector<int>v;
    bool ok = true;

//    while(a && b){
//        if(a >= b){
//            v.push_back(0);
//            v.push_back(1);
//        }else{
//            v.push_back(1);
//            v.push_back(0);
//        }
//        a--;
//        b--;
//    }
//    if(a){
//        if(v.empty() || (!v.empty() && v.back() == 1)){
//            a--;
//            v.push_back(0);
//        }
//    }
//    if (b){
//        if((!v.empty() && v.back() == 0)){
//            b--;
//            v.push_back(1);
//        }else if(v.empty() && b > c){
//            b--;
//            v.push_back(1);
//        }
//    }
    while(ok){
        if(v.size() == sum) break;
        if(!v.empty()){
            if(v.back() == 0){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                ok = false;
            }else if(v.back() == 1){
                if(a){
                    a--;
                    v.push_back(0);
                    continue;
                }
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }else if(v.back() == 2){
                if(b){
                    b--;
                    v.push_back(1);
                    continue;
                }
                if(d){
                    d--;
                    v.push_back(3);
                    continue;
                }
                ok = false;
            }else{
                if(c){
                    c--;
                    v.push_back(2);
                    continue;
                }
                ok = false;
            }
        }else{
            if(a){
                if(a >= b){
                    v.push_back(0);
                    a--;
                }else if(b){
                    v.push_back(1);
                    b--;
                }
            }
            if(b){
                if(b >= c){
                    v.push_back(1);
                    b--;
                }else if(c){
                    v.push_back(2);
                    c--;
                }
                continue;
            }
            if(c){
                if(c >= d){
                    v.push_back(2);
                    c--;
                }else if(d){
                    v.push_back(3);
                    d--;
                }
            }
            if(d){
                v.push_back(3);
                d--;
            }
        }
    }

    if(!ok || v.size() != sum || (a||b||c||d)){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        for(int i=0;i<v.size();i++) cout << v[i] << " ";
        cout << endl;
    }

}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define MOD 1000000007
#define PI 3.14159265
#define INF 1000000000000000000
#define pll pair<ll,ll>
#define fastio  ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define vll vector<ll>
#define all(a) a.begin(),a.end()
#define forl(i,n) for(ll i=0;i<n;i++)
#define fore(i,n) for(ll i=1;i<=n;i++)
ll max(ll a,ll b)
{
    if(a>b)
    return a;
    return b;
}

ll min(ll a,ll b)
{
    return a+b-max(a,b);
}
ll mulmod(ll a, ll b, ll mod)
{
    /*ll res = 0; // Initialize result
    a = a % mod;
    while (b > 0)
    {
        // If b is odd, add 'a' to result
        if (b % 2 == 1)
            res = (res + a) % mod;

        // Multiply 'a' with 2
        a = (a * 2) % mod;

        // Divide b by 2
        b /= 2;
    }

    // Return result
    return res % mod; */
    return ((a%MOD)*(b%MOD)%MOD);
}
ll mod(ll a,ll b)
{
    if(a>b)
    return a-b;
    else
    return b-a;
}
ll power(ll x,ll y, ll p)
{
    ll res = 1;
    x = x % p;
    while (y > 0)
    {
        if (y & 1)
            res = (res*x)%p;
        y = y>>1;
        x = (x*x)%p;
    }
    return res;

}
int bits(ll n)
{
    ll ctr=0;
    while(n)
    {
        n/=10;
        ctr++;
    }
    return ctr;
}
bool cmp(pll p1,pll p2)
{
    if(p1.f<p2.f)
    return true;
    if(p1.f==p2.f)
    return p1.s>p2.s;
    return false;
}
vll bits1(ll n)
{
    vll res;
    while(n)
    {
        res.pb(n%10);
        n/=10;
    }
    reverse(all(res));
    return res;
}
ll get(ll m,ll d,ll s1)
{
    if(mod(0,m-d)<=s1)
    return 0;
    else
    return mod(0,m-d)-s1;
}
void debug(ll x)
{
    if(x)
    cout<<"yes\n";
    else
    cout<<"no\n";

}
vll st;
vector<pll> vec;
vll all_max;
ll m;
void buildST(ll ss,ll se,ll v)
{
    if(ss==se)
    {
        st[v] = ss;
        return;
    }

    ll mid = (ss+se)/2;
    buildST(ss,mid,2*v+1);
    buildST(mid+1,se,2*v+2);
    if(vec[st[2*v+1]].s>=vec[st[2*v+2]].s)
    st[v]  = st[2*v+1];
    else
    st[v] = st[2*v+2];
}
ll query(ll ss,ll se,ll qs,ll qe,ll v)
{
   return all_max[qs];
}
void ex()
{
    cout<<"NO";
    exit(0);
}
bool check(vll vec,ll ctr[])
{
    ll temp[4]={0};
    for(auto it:vec)
    temp[it]++;
    forl(i,4)
    if(ctr[i]!=temp[i])
    return false;
    forl(i,vec.size()-1)
    {
        if(mod(0,vec[i]-vec[i+1])!=1)
        return false;
    }
    return true;
}
int main()
{
    fastio;
    ll ctr[4];
    cin>>ctr[0]>>ctr[1]>>ctr[2]>>ctr[3];
    ll t1[4];
    ll t2[4];
    forl(i,4)
    {
        t1[i]=ctr[i];
        t2[i]=ctr[i];
    }
    vll ans[2];
    forl(i,t1[3])
    {
        ans[0].pb(3);
        ans[0].pb(2);
    }
    if(ctr[2]+1<ctr[3])
    ex();
    if(ctr[2]+1==ctr[3])
    {
        if(ctr[1]==0 && ctr[0]==0)
        {
            cout<<"YES\n";
            forl(i,ctr[2])
            cout<<3<<" "<<2<<" ";
            cout<<3;

        }
        else
        {
            cout<<"NO";
        }
        return 0;
    }
    t1[2]-=t1[3];
    if(ans[0].size())
    {
        forl(i,t1[2])
        {
            ans[0].pb(1);
            ans[0].pb(2);
        }

        ans[0].pb(1);
        t1[1]-=(t1[2]+1);
        forl(i,t1[0])
        {
            ans[0].pb(0);
            ans[0].pb(1);
        }
        t1[1]-=t1[0];
        forl(i,t1[1])
        {
            ans[0].pb(1);
        }

    }
    else
    {
        if(t1[1]>t1[0])
        {
            forl(i,t1[0])
            {
                ans[0].pb(1);
                ans[0].pb(0);
            }
            forl(i,t1[1]-t1[0])
            ans[0].pb(1);
        }
        else
        {
            forl(i,t1[1])
            {
                ans[0].pb(0);
                ans[0].pb(1);
            }
            forl(i,t1[0]-t1[1])
            ans[0].pb(0);
        }
    }
    ans[1].pb(2);
    t2[2]--;
    forl(i,t2[3])
    {
        ans[1].pb(3);
        ans[1].pb(2);
    }
    t2[2]-=t2[3];
    if(t2[1])
    {
        t2[1]--;
        ans[1].pb(1);
        forl(i,t2[2])
        {
            ans[1].pb(2);
            ans[1].pb(1);
        }
        t2[1]-=t2[2];
        if(t2[0])
        {
            ans[1].pb(0);
            t2[0]--;
            forl(i,t2[1])
            {
                ans[1].pb(1);
                ans[1].pb(0);
            }

        }
    }

    if(check(ans[0],ctr))
    {
        cout<<"YES\n";
        for(auto it:ans[0])
        cout<<it<<" ";
    }
    else if(check(ans[1],ctr))
    {
        cout<<"YES\n";
        for(auto it:ans[1])
        {
            cout<<it<<" ";
        }
    }
    else
    {
        cout<<"NO";
    }
}