// package com.company;
import java.util.*;
import java.lang.*;
import java.io.*;
//****Use Integer Wrapper Class for Arrays.sort()****
public class BA4 {
    public static void main(String[] Args){
        FastReader scan=new FastReader();
        int a=scan.nextInt();
        int b=scan.nextInt();
        int c=scan.nextInt();
        int d=scan.nextInt();
        StringBuilder ans=new StringBuilder();
//        if(a-b>1||d-c>1){
//            System.out.println("NO");
//        }
//        else if(a>b){
//            if(c!=0&&d!=0) {
//                System.out.println("NO");
//            }
//            else{
//                System.out.println("YES");
//                int co=0;
//                while(a>0||b>0){
//                    if(co%2==0){
//                        ans.append("0 ");
//                        a--;
//                    }
//                    else{
//                        ans.append("1 ");
//                        b--;
//                    }
//                    co++;
//                }
//            }
//            System.out.println(ans);
//        }
//        else if(d>c){
//            if(a!=0&&b!=0) {
//                System.out.println("NO");
//            }
//            else{
//                System.out.println("YES");
//                int co=0;
//                while(c>0||d>0){
//                    if(co%2==0){
//                        ans.append("3 ");
//                        d--;
//                    }
//                    else{
//                        ans.append("2 ");
//                        c--;
//                    }
//                    co++;
//                }
//                System.out.println(ans);
//            }
//        }
//        else{
//            int flag=1;
            int ta=a;
            int tb=b;
            int tc=c;
            int td=d;
            int co=0;
            while(a>0){
                if(co%2==0) {
                    ans.append("0 ");
                    a--;
                }
                else{
                    ans.append("1 ");
                    b--;
                }
                co++;
            }
            co=0;
            if(c>0||d>0){
                ans.append("1 ");
                b--;
                co=1;
            }
            while(b>0){
                if(co%2==0) {
                    ans.append("1 ");
                    b--;
                }
                else{
                    ans.append("2 ");
                    c--;
                }
                co++;
            }
            co=0;
            if(d>0){
                ans.append("2 ");
                c--;
                co=1;
            }
            while(c>0){
                if(co%2==0) {
                    ans.append("2 ");
                    c--;
                }
                else{
                    ans.append("3 ");
                    d--;
                }
                co++;
            }
            if(d>0){
                ans.append("3 ");
                d--;
            }
            if(a==0&&b==0&&c==0&&d==0){
                System.out.println("YES");
                System.out.println(ans);
            }
            else{
                ans=new StringBuilder();
                a=ta;
                b=tb;
                c=tc;
                d=td;
                co=0;
                while(a>0){
                    if(co%2==0) {
                        ans.append("1 ");
                        b--;
                    }
                    else{
                        ans.append("0 ");
                        a--;
                    }
                    co++;
                }
                co=0;
                if(c>0||d>0){
                    ans.append("1 ");
                    b--;
                    co=1;
                }
                while(b>0){
                    if(co%2==0) {
                        ans.append("1 ");
                        b--;
                    }
                    else{
                        ans.append("2 ");
                        c--;
                    }
                    co++;
                }
                co=0;
                if(d>0){
                    ans.append("2 ");
                    c--;
                    co=1;
                }
                while(c>0){
                    if(co%2==0) {
                        ans.append("2 ");
                        c--;
                    }
                    else{
                        ans.append("3 ");
                        d--;
                    }
                    co++;
                }
                if(d>0){
                    ans.append("3 ");
                    d--;
                }
                if(a==0&&b==0&&c==0&&d==0){
                    System.out.println("YES");
                    System.out.println(ans);
                }
                else{
                    ans=new StringBuilder();
                    a=ta;
                    b=tb;
                    c=tc;
                    d=td;
                    co=0;
                    while(d>0){
                        if(co%2==0) {
                            ans.append("2 ");
                            c--;
                        }
                        else{
                            ans.append("3 ");
                            d--;
                        }
                        co++;
                    }
                    co=0;
                    if(b>0||a>0){
                        ans.append("2 ");
                        c--;
                        co=1;
                    }
                    while(c>0){
                        if(co%2==0) {
                            ans.append("2 ");
                            c--;
                        }
                        else{
                            ans.append("1 ");
                            b--;
                        }
                        co++;
                    }
                    co=0;
                    if(a>0){
                        ans.append("1 ");
                        a--;
                        co=1;
                    }
                    while(b>0){
                        if(co%2==0) {
                            ans.append("1 ");
                            b--;
                        }
                        else{
                            ans.append("0 ");
                            a--;
                        }
                        co++;
                    }
                    if(a>0){
                        ans.append("0 ");
                        a--;
                    }
                    if(a==0&&b==0&&c==0&&d==0){
                        System.out.println("YES");
                        System.out.println(ans);
                    }
                    else{
                        ans=new StringBuilder();
                        a=ta;
                        b=tb;
                        c=tc;
                        d=td;
                        co=0;
                        while(d>0){
                            if(co%2==0) {
                                ans.append("3 ");
                                d--;
                            }
                            else{
                                ans.append("2 ");
                                c--;
                            }
                            co++;
                        }
                        co=0;
                        if(b>0||a>0){
                            ans.append("2 ");
                            c--;
                            co=1;
                        }
                        while(c>0){
                            if(co%2==0) {
                                ans.append("2 ");
                                c--;
                            }
                            else{
                                ans.append("1 ");
                                b--;
                            }
                            co++;
                        }
                        co=0;
                        if(a>0){
                            ans.append("1 ");
                            a--;
                            co=1;
                        }
                        while(b>0){
                            if(co%2==0) {
                                ans.append("1 ");
                                b--;
                            }
                            else{
                                ans.append("0 ");
                                a--;
                            }
                            co++;
                        }
                        if(a>0){
                            ans.append("0 ");
                            a--;
                        }
                        if(a==0&&b==0&&c==0&&d==0){
                            System.out.println("YES");
                            System.out.println(ans);
                        }
                        else{
                            System.out.println("NO");
                        }
                    }
                }
            }
//        }
    }
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader()
        {
            br = new BufferedReader(new
                    InputStreamReader(System.in));
        }

        String next()
        {
            while (st == null || !st.hasMoreElements())
            {
                try
                {
                    st = new StringTokenizer(br.readLine());
                }
                catch (IOException  e)
                {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt()
        {
            return Integer.parseInt(next());
        }

        long nextLong()
        {
            return Long.parseLong(next());
        }

        double nextDouble()
        {
            return Double.parseDouble(next());
        }

        String nextLine()
        {
            String str = "";
            try
            {
                str = br.readLine();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return str;
        }
    }

}


import java.io.*;
import java.util.*;

/*
───────────────■■■─────────────────────────
──█▄─▄█─▄▀▀▀▄─█──▄█─────█──▄▀─▄▀▀▀▄─▀▀█▀▀──
──█─▀─█─█───█─█─█─█─────█■█───█───█───█────
──█───█─▀▄▄▄▀─█▀──█─────█──▀▄─▀▄▄▄▀───█────
───────────────────────────────────────────
*/

public class Main {

    static FastReader in;
    static PrintWriter out;
    static Random rand = new Random();
    static int c0, c1, c2, c3;
    static LinkedList<Integer> ans;

    static void w(Object... args) {
        for (Object a : args) {
            out.print(a);
            out.print(' ');
        }
    }
    static void wl(Object... args) {
        for (Object a : args) {
            out.print(a);
            out.print('\n');
        }
    }
    static void wl() {
        out.print('\n');
    }
    static void ans() {
        for (int a : ans) {
            w(a);
        }
        wl();
    }

    static void solve() {
        c0 = in.nextInt();
        c1 = in.nextInt();
        c2 = in.nextInt();
        c3 = in.nextInt();

        ans = new LinkedList<>();

        if (c0 > c1 + 1 || c3 > c2 + 1) {
            wl("NO");
            return;
        }

        for (int i = 0; i < Math.min(c0, c1); i++) {
            ans.addLast(0);
            ans.addLast(1);
        }
        if (c0 > c1) {
            if (c2 + c3 > 0) {
                wl("NO");
            } else {
                ans.addLast(0);
                wl("YES");
                ans();
            }
            return;
        }

        for (int i = 0; i < Math.min(c2, c3); i++) {
            ans.addLast(2);
            ans.addLast(3);
        }
        if (c3 > c2) {
            if (c0 + c1 > 0) {
                wl("NO");
            } else {
                ans.addFirst(3);
                wl("YES");
                ans();
            }
            return;
        }

        c1 -= c0;
        c2 -= c3;

        if (Math.abs(c1 - c2) > 1) {
            wl("NO");
            return;
        }

        for (int i = 0; i < Math.min(c1, c2); i++) {
            ans.addLast(2);
            ans.addLast(1);
        }
        if (c1 > c2) {
            ans.addFirst(1);
        } else if (c2 > c1) {
            ans.addLast(2);
        }

        wl("YES");
        ans();
    }

    public static void main(String[] args) {
        in = new FastReader(System.in);
//        in = new FastReader(new FileInputStream("input.txt"));
        out = new PrintWriter(System.out);
//        out = new PrintWriter(new FileOutputStream("output.txt"));

        int q = 1;

        while (q-- > 0) {
            solve();
        }

        out.close();
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        FastReader(InputStream is) {
            br = new BufferedReader(new InputStreamReader(is));
        }

        Integer nextInt() {
            return Integer.parseInt(next());
        }

        Long nextLong() {
            return Long.parseLong(next());
        }

        Double nextDouble() {
            return Double.parseDouble(next());
        }

        String next() {
            while (st == null || !st.hasMoreTokens()) {
                st = new StringTokenizer(nextLine());
            }
            return st.nextToken();
        }

        String nextLine() {
            String s = "";
            try {
                s = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s;
        }
    }
}


import java.io.*;
import java.util.*;

/*
───────────────■■■─────────────────────────
──█▄─▄█─▄▀▀▀▄─█──▄█─────█──▄▀─▄▀▀▀▄─▀▀█▀▀──
──█─▀─█─█───█─█─█─█─────█■█───█───█───█────
──█───█─▀▄▄▄▀─█▀──█─────█──▀▄─▀▄▄▄▀───█────
───────────────────────────────────────────
*/

public class Main {

    static FastReader in;
    static PrintWriter out;
    static Random rand = new Random();

    static void solve() {
        int[] cnt = new int[4];
        int cnt1 = 0;
        for (int i = 0; i < 4; i++) {
            cnt[i] = in.nextInt();
            if (cnt[i] > 0) {
                cnt1++;
            }
        }

        if (cnt1 == 4) {
            if ((cnt[1] < cnt[0]) || (cnt[2] < cnt[3])) {
                out.println("NO");
                return;
            }
            cnt[1] -= cnt[0] - 1;
            cnt[2] -= cnt[3] - 1;

            if (cnt[1] == cnt[2]) {
                out.println("YES");
                for (int i = 0; i < cnt[3] - 1; i++) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                }
                out.print(3 + " ");
                for (int i = 0; i < cnt[1]; i++) {
                    out.print(2 + " ");
                    out.print(1 + " ");
                }
                out.print(0 + " ");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    out.print(1 + " ");
                    out.print(0 + " ");
                }
            } else if (cnt[1] == cnt[2] + 1) {
                out.println("YES");
                for (int i = 0; i < cnt[3] - 1; i++) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                }
                out.print(3 + " ");
                for (int i = 0; i < cnt[2]; i++) {
                    out.print(2 + " ");
                    out.print(1 + " ");
                }
                out.print(0 + " ");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    out.print(1 + " ");
                    out.print(0 + " ");
                }
                out.print(1 + " ");
            } else if (cnt[2] == cnt[1] + 1) {
                out.println("YES");
                out.print(2 + " ");
                for (int i = 0; i < cnt[3] - 1; i++) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                }
                out.print(3 + " ");
                for (int i = 0; i < cnt[1]; i++) {
                    out.print(2 + " ");
                    out.print(1 + " ");
                }
                out.print(0 + " ");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    out.print(1 + " ");
                    out.print(0 + " ");
                }
            } else {
                out.println("NO");
            }
        } else if (cnt1 == 3) {
            if (cnt[1] == 0 || cnt[2] == 0) {
                out.print("NO");
                return;
            }

            if (cnt[0] > 0) {
                if (cnt[1] == cnt[2] && cnt[0] == 1) {
                    out.print(0 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                } else if (cnt[1] == cnt[2] + 1 && cnt[0] == 2) {
                    out.print(0 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                    out.print(1 + " ");
                    out.print(0 + " ");
                } else {
                    out.println("NO");
                }
            } else if (cnt[3] > 0) {
                if (cnt[1] == cnt[2] && cnt[3] == 1) {
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                    out.print(3 + " ");
                } else if (cnt[2] == cnt[1] + 1 && cnt[3] == 2) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                    for (int i = 0; i < cnt[1]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                    out.print(3 + " ");
                } else {
                    out.println("NO");
                }
            } else {
                out.print("NO");
            }
        } else if (cnt1 == 2) {
            if (cnt[0] > 0 && cnt[1] > 0) {
                if (cnt[0] == cnt[1] + 1) {
                    out.println("YES");
                    out.print(0 + " ");
                    for (int i = 0; i < cnt[1]; i++) {
                        out.print(1 + " ");
                        out.print(0 + " ");
                    }
                } else if (cnt[1] == cnt[0] + 1) {
                    out.println("YES");
                    out.print(1 + " ");
                    for (int i = 0; i < cnt[0]; i++) {
                        out.print(0 + " ");
                        out.print(1 + " ");
                    }
                } else {
                    out.println("NO");
                }
            } else if (cnt[1] > 0 && cnt[2] > 0) {
                if (cnt[1] == cnt[2] + 1) {
                    out.println("YES");
                    out.print(1 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(2 + " ");
                        out.print(1 + " ");
                    }
                } else if (cnt[2] == cnt[1] + 1) {
                    out.println("YES");
                    out.print(2 + " ");
                    for (int i = 0; i < cnt[1]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                } else {
                    out.println("NO");
                }
            } else if (cnt[2] > 0 && cnt[3] > 0) {
                if (cnt[2] == cnt[3] + 1) {
                    out.println("YES");
                    out.print(2 + " ");
                    for (int i = 0; i < cnt[3]; i++) {
                        out.print(3 + " ");
                        out.print(2 + " ");
                    }
                } else if (cnt[3] == cnt[2] + 1) {
                    out.println("YES");
                    out.print(3 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(2 + " ");
                        out.print(3 + " ");
                    }
                } else {
                    out.println("NO");
                }
            } else {
                out.println("NO");
            }
        } else {
            if (cnt[0] == 1) {
                out.println("YES");
                out.println(0);
            } else if (cnt[1] == 1) {
                out.println("YES");
                out.println(1);
            } else if (cnt[2] == 1) {
                out.println("YES");
                out.println(2);
            } else if (cnt[3] == 1) {
                out.println("YES");
                out.println(3);
            } else {
                out.println("NO");
            }
        }
    }

    public static void main(String[] args) {
        in = new FastReader(System.in);
//        in = new FastReader(new FileInputStream("input.txt"));
        out = new PrintWriter(System.out);
//        out = new PrintWriter(new FileOutputStream("output.txt"));

        int q = 1;

        while (q-- > 0) {
            solve();
        }

        out.close();
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        FastReader(InputStream is) {
            br = new BufferedReader(new InputStreamReader(is));
        }

        Integer nextInt() {
            return Integer.parseInt(next());
        }

        Long nextLong() {
            return Long.parseLong(next());
        }

        Double nextDouble() {
            return Double.parseDouble(next());
        }

        String next() {
            while (st == null || !st.hasMoreTokens()) {
                st = new StringTokenizer(nextLine());
            }
            return st.nextToken();
        }

        String nextLine() {
            String s = "";
            try {
                s = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s;
        }
    }
}


import java.io.*;
import java.util.*;

/*
───────────────■■■─────────────────────────
──█▄─▄█─▄▀▀▀▄─█──▄█─────█──▄▀─▄▀▀▀▄─▀▀█▀▀──
──█─▀─█─█───█─█─█─█─────█■█───█───█───█────
──█───█─▀▄▄▄▀─█▀──█─────█──▀▄─▀▄▄▄▀───█────
───────────────────────────────────────────
*/

public class Main {

    static FastReader in;
    static PrintWriter out;
    static Random rand = new Random();

    static void solve() {
        int[] cnt = new int[4];
        int cnt1 = 0;
        for (int i = 0; i < 4; i++) {
            cnt[i] = in.nextInt();
            if (cnt[i] > 0) {
                cnt1++;
            }
        }

        if (cnt1 == 4) {
            if ((cnt[1] < cnt[0]) || (cnt[2] < cnt[3])) {
                out.println("NO");
                return;
            }
            cnt[1] -= cnt[0] - 1;
            cnt[2] -= cnt[3] - 1;

            if (cnt[1] == cnt[2]) {
                out.println("YES");
                for (int i = 0; i < cnt[3] - 1; i++) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                }
                out.print(3 + " ");
                for (int i = 0; i < cnt[1]; i++) {
                    out.print(2 + " ");
                    out.print(1 + " ");
                }
                out.print(0 + " ");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    out.print(1 + " ");
                    out.print(0 + " ");
                }
            } else if (cnt[1] == cnt[2] + 1) {
                out.println("YES");
                for (int i = 0; i < cnt[3] - 1; i++) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                }
                out.print(3 + " ");
                for (int i = 0; i < cnt[2]; i++) {
                    out.print(2 + " ");
                    out.print(1 + " ");
                }
                out.print(0 + " ");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    out.print(1 + " ");
                    out.print(0 + " ");
                }
                out.print(1 + " ");
            } else if (cnt[2] == cnt[1] + 1) {
                out.println("YES");
                out.print(2 + " ");
                for (int i = 0; i < cnt[3] - 1; i++) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                }
                out.print(3 + " ");
                for (int i = 0; i < cnt[1]; i++) {
                    out.print(2 + " ");
                    out.print(1 + " ");
                }
                out.print(0 + " ");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    out.print(1 + " ");
                    out.print(0 + " ");
                }
            } else {
                out.println("NO");
            }
        } else if (cnt1 == 3) {
            if (cnt[1] == 0 || cnt[2] == 0) {
                out.print("NO");
                return;
            }

            if (cnt[0] > 0) {
                if (cnt[1] == cnt[2] && cnt[0] == 1) {
                    out.print(0 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                } else if (cnt[1] == cnt[2] + 1 && cnt[0] == 2) {
                    out.print(0 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                    out.print(1 + " ");
                    out.print(0 + " ");
                } else {
                    out.println("NO");
                }
            } else if (cnt[3] > 0) {
                if (cnt[1] == cnt[2] && cnt[3] == 1) {
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                    out.print(3 + " ");
                } else if (cnt[2] == cnt[1] + 1 && cnt[3] == 2) {
                    out.print(3 + " ");
                    out.print(2 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                    out.print(3 + " ");
                } else {
                    out.println("NO");
                }
            } else {
                out.print("NO");
            }
        } else if (cnt1 == 2) {
            if (cnt[0] > 0 && cnt[1] > 0) {
                if (cnt[0] == cnt[1] + 1) {
                    out.println("YES");
                    out.print(0 + " ");
                    for (int i = 0; i < cnt[1]; i++) {
                        out.print(1 + " ");
                        out.print(0 + " ");
                    }
                } else if (cnt[1] == cnt[0] + 1) {
                    out.println("YES");
                    out.print(1 + " ");
                    for (int i = 0; i < cnt[0]; i++) {
                        out.print(0 + " ");
                        out.print(1 + " ");
                    }
                } else {
                    out.println("NO");
                }
            } else if (cnt[1] > 0 && cnt[2] > 0) {
                if (cnt[1] == cnt[2] + 1) {
                    out.println("YES");
                    out.print(1 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(2 + " ");
                        out.print(1 + " ");
                    }
                } else if (cnt[2] == cnt[1] + 1) {
                    out.println("YES");
                    out.print(2 + " ");
                    for (int i = 0; i < cnt[1]; i++) {
                        out.print(1 + " ");
                        out.print(2 + " ");
                    }
                } else {
                    out.println("NO");
                }
            } else if (cnt[2] > 0 && cnt[3] > 0) {
                if (cnt[2] == cnt[3] + 1) {
                    out.println("YES");
                    out.print(2 + " ");
                    for (int i = 0; i < cnt[3]; i++) {
                        out.print(3 + " ");
                        out.print(2 + " ");
                    }
                } else if (cnt[3] == cnt[2] + 1) {
                    out.println("YES");
                    out.print(3 + " ");
                    for (int i = 0; i < cnt[2]; i++) {
                        out.print(2 + " ");
                        out.print(3 + " ");
                    }
                } else {
                    out.println("NO");
                }
            } else {
                out.println("NO");
            }
        } else {
            if (cnt[0] == 1) {
                out.println("YES");
                out.println(0);
            } else if (cnt[1] == 1) {
                out.println("YES");
                out.println(1);
            } else if (cnt[2] == 1) {
                out.println("YES");
                out.println(2);
            } else if (cnt[3] == 1) {
                out.println("YES");
                out.println(3);
            } else {
                out.println("NO");
            }
        }
    }

    public static void main(String[] args) {
        in = new FastReader(System.in);
//        in = new FastReader(new FileInputStream("input.txt"));
        out = new PrintWriter(System.out);
//        out = new PrintWriter(new FileOutputStream("output.txt"));

        int q = 1;

        while (q-- > 0) {
            solve();
        }

        out.close();
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        FastReader(InputStream is) {
            br = new BufferedReader(new InputStreamReader(is));
        }

        Integer nextInt() {
            return Integer.parseInt(next());
        }

        Long nextLong() {
            return Long.parseLong(next());
        }

        Double nextDouble() {
            return Double.parseDouble(next());
        }

        String next() {
            while (st == null || !st.hasMoreTokens()) {
                st = new StringTokenizer(nextLine());
            }
            return st.nextToken();
        }

        String nextLine() {
            String s = "";
            try {
                s = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s;
        }
    }
}


import java.io.*;
import java.util.*;

/*
───────────────■■■─────────────────────────
──█▄─▄█─▄▀▀▀▄─█──▄█─────█──▄▀─▄▀▀▀▄─▀▀█▀▀──
──█─▀─█─█───█─█─█─█─────█■█───█───█───█────
──█───█─▀▄▄▄▀─█▀──█─────█──▀▄─▀▄▄▄▀───█────
───────────────────────────────────────────
*/

public class Main {

    static FastReader in;
    static PrintWriter out;
    static Random rand = new Random();

    static void w(Object... args) {
        for (Object a : args) {
            out.print(a);
            out.print(' ');
        }
    }
    static void wl(Object... args) {
        for (Object a : args) {
            out.print(a);
            out.print('\n');
        }
    }

    static void solve() {
        int[] cnt = new int[4];
        int zeros = 0;
        for (int i = 0; i < 4; i++) {
            cnt[i] = in.nextInt();
            if (cnt[i] == 0) {
                zeros++;
            }
        }

        if (zeros == 0) {
            if (cnt[1] < cnt[0] || cnt[2] < cnt[3]) {
                wl("NO");
                return;
            }
            cnt[1] -= cnt[0] - 1;
            cnt[2] -= cnt[3] - 1;
            if (cnt[1] == cnt[2]) {
                wl("YES");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    w(0, 1);
                }
                w(0);
                for (int i = 0; i < cnt[1]; i++) {
                    w(1, 2);
                }
                w(3);
                for (int i = 0; i < cnt[3] - 1; i++) {
                    w(2, 3);
                }
                wl();
            } else if (cnt[1] == cnt[2] + 1) {
                wl("YES");
                w(1);
                for (int i = 0; i < cnt[0] - 1; i++) {
                    w(0, 1);
                }
                w(0);
                for (int i = 0; i < cnt[2]; i++) {
                    w(1, 2);
                }
                w(3);
                for (int i = 0; i < cnt[3] - 1; i++) {
                    w(2, 3);
                }
                wl();
            } else if (cnt[2] == cnt[1] + 1) {
                wl("YES");
                for (int i = 0; i < cnt[0] - 1; i++) {
                    w(0, 1);
                }
                w(0);
                for (int i = 0; i < cnt[1]; i++) {
                    w(1, 2);
                }
                w(3);
                for (int i = 0; i < cnt[3] - 1; i++) {
                    w(2, 3);
                }
                w(2);
                wl();
            } else {
                wl("NO");
            }
        } else if (zeros == 1) {
            if (cnt[1] == 0 || cnt[2] == 0) {
                wl("NO");
                return;
            }
            if (cnt[0] != 0) {
                if (cnt[0] == 1 && cnt[1] == cnt[2]) {
                    wl("YES");
                    w(0);
                    for (int i = 0; i < cnt[2]; i++) {
                        w(1, 2);
                    }
                    wl();
                } else if (cnt[0] == 2 && cnt[1] == cnt[2] + 1) {
                    wl("YES");
                    w(0);
                    for (int i = 0; i < cnt[2]; i++) {
                        w(1, 2);
                    }
                    w(1, 0);
                    wl();
                } else {
                    wl("NO");
                }
            } else {
                if (cnt[3] == 1 && cnt[1] == cnt[2]) {
                    wl("YES");
                    for (int i = 0; i < cnt[1]; i++) {
                        w(1, 2);
                    }
                    w(3);
                    wl();
                } else if (cnt[3] == 2 && cnt[2] == cnt[1] + 1) {
                    wl("YES");
                    w(3, 2);
                    for (int i = 0; i < cnt[1]; i++) {
                        w(1, 2);
                    }
                    w(3);
                    wl();
                } else {
                    wl("NO");
                }
            }
        } else if (zeros == 2) {
            if (cnt[0] != 0 && cnt[1] != 0) {
                if (cnt[0] == cnt[1]) {
                    wl("YES");
                    for (int i = 0; i < cnt[0]; i++) {
                        w(0, 1);
                    }
                    wl();
                } else if (cnt[0] == cnt[1] + 1) {
                    wl("YES");
                    for (int i = 0; i < cnt[1]; i++) {
                        w(0, 1);
                    }
                    w(0);
                    wl();
                } else if (cnt[1] == cnt[0] + 1) {
                    wl("YES");
                    w(1);
                    for (int i = 0; i < cnt[0]; i++) {
                        w(0, 1);
                    }
                    wl();
                } else {
                    wl("NO");
                }
            } else if (cnt[1] != 0 && cnt[2] != 0) {
                if (cnt[1] == cnt[2]) {
                    wl("YES");
                    for (int i = 0; i < cnt[1]; i++) {
                        w(1, 2);
                    }
                    wl();
                } else if (cnt[1] == cnt[2] + 1) {
                    wl("YES");
                    for (int i = 0; i < cnt[2]; i++) {
                        w(1, 2);
                    }
                    w(1);
                    wl();
                } else if (cnt[2] == cnt[1] + 1) {
                    wl("YES");
                    w(2);
                    for (int i = 0; i < cnt[1]; i++) {
                        w(1, 2);
                    }
                    wl();
                } else {
                    wl("NO");
                }
            } else if (cnt[2] != 0 && cnt[3] != 0) {
                if (cnt[2] == cnt[3]) {
                    wl("YES");
                    for (int i = 0; i < cnt[2]; i++) {
                        w(2, 3);
                    }
                    wl();
                } else if (cnt[2] == cnt[3] + 1) {
                    wl("YES");
                    for (int i = 0; i < cnt[3]; i++) {
                        w(2, 3);
                    }
                    w(2);
                    wl();
                } else if (cnt[3] == cnt[2] + 1) {
                    wl("YES");
                    w(3);
                    for (int i = 0; i < cnt[2]; i++) {
                        w(2, 3);
                    }
                    wl();
                } else {
                    wl("NO");
                }
            } else {
                wl("NO");
            }
        } else if (zeros == 3) {
            if (cnt[0] == 1) {
                wl("YES");
                w(0);
                wl();
            } else if (cnt[1] == 1) {
                wl("YES");
                w(1);
                wl();
            } else if (cnt[2] == 1) {
                wl("YES");
                w(1);
                wl();
            } else if (cnt[3] == 1) {
                wl("YES");
                w(3);
                wl();
            } else {
                wl("NO");
            }
        }
    }

    public static void main(String[] args) {
        in = new FastReader(System.in);
//        in = new FastReader(new FileInputStream("input.txt"));
        out = new PrintWriter(System.out);
//        out = new PrintWriter(new FileOutputStream("output.txt"));

        int q = 1;

        while (q-- > 0) {
            solve();
        }

        out.close();
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        FastReader(InputStream is) {
            br = new BufferedReader(new InputStreamReader(is));
        }

        Integer nextInt() {
            return Integer.parseInt(next());
        }

        Long nextLong() {
            return Long.parseLong(next());
        }

        Double nextDouble() {
            return Double.parseDouble(next());
        }

        String next() {
            while (st == null || !st.hasMoreTokens()) {
                st = new StringTokenizer(nextLine());
            }
            return st.nextToken();
        }

        String nextLine() {
            String s = "";
            try {
                s = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s;
        }
    }
}


import java.io.*;
import java.util.*;

/*
───────────────■■■─────────────────────────
──█▄─▄█─▄▀▀▀▄─█──▄█─────█──▄▀─▄▀▀▀▄─▀▀█▀▀──
──█─▀─█─█───█─█─█─█─────█■█───█───█───█────
──█───█─▀▄▄▄▀─█▀──█─────█──▀▄─▀▄▄▄▀───█────
───────────────────────────────────────────
*/

public class Main {

    static FastReader in;
    static PrintWriter out;
    static Random rand = new Random();
    static int c0, c1, c2, c3;
    static LinkedList<Integer> ans;

    static void w(Object... args) {
        for (Object a : args) {
            out.print(a);
            out.print(' ');
        }
    }
    static void wl(Object... args) {
        for (Object a : args) {
            out.print(a);
            out.print('\n');
        }
    }
    static void wl() {
        out.print('\n');
    }
    static void ans() {
        wl("YES");
        for (int a : ans) {
            w(a);
        }
        wl();
    }

    static void solve() {
        c0 = in.nextInt();
        c1 = in.nextInt();
        c2 = in.nextInt();
        c3 = in.nextInt();

        ans = new LinkedList<>();

        if (c0 > c1 + 1 || c3 > c2 + 1) {
            wl("NO");
            return;
        }

        for (int i = 0; i < Math.min(c0, c1); i++) {
            ans.addLast(0);
            ans.addLast(1);
        }
        if (c0 > c1) {
            if (c2 + c3 > 0) {
                wl("NO");
            } else {
                ans.addLast(0);
                ans();
            }
            return;
        }

        for (int i = 0; i < Math.min(c2, c3); i++) {
            ans.addLast(2);
            ans.addLast(3);
        }
        if (c3 > c2) {
            if (c0 + c1 > 0) {
                wl("NO");
            } else {
                ans.addFirst(3);
                ans();
            }
            return;
        }

        c1 -= c0;
        c2 -= c3;

        if (Math.abs(c1 - c2) > 1) {
            wl("NO");
            return;
        }

        for (int i = 0; i < Math.min(c1, c2); i++) {
            ans.addLast(2);
            ans.addLast(1);
        }
        if (c1 > 0) {
            ans.addFirst(1);
        } else if (c2 > 0) {
            ans.addLast(2);
        }

        ans();
    }

    public static void main(String[] args) {
        in = new FastReader(System.in);
//        in = new FastReader(new FileInputStream("input.txt"));
        out = new PrintWriter(System.out);
//        out = new PrintWriter(new FileOutputStream("output.txt"));

        int q = 1;

        while (q-- > 0) {
            solve();
        }

        out.close();
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        FastReader(InputStream is) {
            br = new BufferedReader(new InputStreamReader(is));
        }

        Integer nextInt() {
            return Integer.parseInt(next());
        }

        Long nextLong() {
            return Long.parseLong(next());
        }

        Double nextDouble() {
            return Double.parseDouble(next());
        }

        String next() {
            while (st == null || !st.hasMoreTokens()) {
                st = new StringTokenizer(nextLine());
            }
            return st.nextToken();
        }

        String nextLine() {
            String s = "";
            try {
                s = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s;
        }
    }
}


import java.io.*;
import java.math.*;
import java.util.*;
import java.util.stream.*;
import java.lang.management.*;
import static java.lang.Math.*;

@SuppressWarnings("unchecked")
public class P1265D {

  public void run() throws Exception {
    int c0 = nextInt(), c1 = nextInt(), c2 = nextInt(), c3 = nextInt();
    StringBuilder ans = new StringBuilder("YES\n");

    for (int c01 = min(c0, c1); c01 > 0; ans.append("0 1 "), c01--, c0--, c1--);
    for (int c23 = min(c2, c3); c23 > 0; ans.append("2 3 "), c23--, c2--, c3--);
    for (int c21 = min(c1, c2); c21 > 0; ans.append("2 1 "), c21--, c2--, c1--);

    if (c2 > 0) {
      ans.append("2");
      c2--;
    }

    println(((c0 | c1 | c2 | c3) == 0) ? ans : "NO");
  }

  public static void main(String... args) throws Exception {
    br = new BufferedReader(new InputStreamReader(System.in));
    pw = new PrintWriter(new BufferedOutputStream(System.out));
    new P1265D().run();
    br.close();
    pw.close();
    System.err.println("\n[Time : " + (System.currentTimeMillis() - startTime) + " ms]");
    long gct = 0, gcc = 0;
    for (GarbageCollectorMXBean garbageCollectorMXBean : ManagementFactory.getGarbageCollectorMXBeans()) {
      gct += garbageCollectorMXBean.getCollectionTime();
      gcc += garbageCollectorMXBean.getCollectionCount();
    }
    System.err.println("[GC time : " + gct + " ms, count = " + gcc + "]");
  }

  static long startTime = System.currentTimeMillis();
  static BufferedReader br;
  static PrintWriter pw;
  StringTokenizer stok;

  String nextToken() throws IOException {
    while (stok == null || !stok.hasMoreTokens()) {
      String s = br.readLine();
      if (s == null) { return null; }
      stok = new StringTokenizer(s);
    }
    return stok.nextToken();
  }

  void print(byte b) { print("" + b); }
  void print(int i) { print("" + i); }
  void print(long l) { print("" + l); }
  void print(double d) { print("" + d); }
  void print(char c) { print("" + c); }
  void print(Object o) {
    if (o instanceof int[]) { print(Arrays.toString((int [])o));
    } else if (o instanceof long[]) { print(Arrays.toString((long [])o));
    } else if (o instanceof char[]) { print(Arrays.toString((char [])o));
    } else if (o instanceof byte[]) { print(Arrays.toString((byte [])o));
    } else if (o instanceof short[]) { print(Arrays.toString((short [])o));
    } else if (o instanceof boolean[]) { print(Arrays.toString((boolean [])o));
    } else if (o instanceof float[]) { print(Arrays.toString((float [])o));
    } else if (o instanceof double[]) { print(Arrays.toString((double [])o));
    } else if (o instanceof Object[]) { print(Arrays.toString((Object [])o));
    } else { print("" + o); }
  }
  void printsp(int [] a) { for (int i = 0, n = a.length; i < n; print(a[i] + " "), i++); }
  void printsp(long [] a) { for (int i = 0, n = a.length; i < n; print(a[i] + " "), i++); }
  void print(String s) { pw.print(s); }
  void println() { println(""); }
  void println(byte b) { println("" + b); }
  void println(int i) { println("" + i); }
  void println(long l) { println("" + l); }
  void println(double d) { println("" + d); }
  void println(char c) { println("" + c); }
  void println(Object o) { print(o); println(); }
  void println(String s) { pw.println(s); }
  int nextInt() throws IOException { return Integer.parseInt(nextToken()); }
  long nextLong() throws IOException { return Long.parseLong(nextToken()); }
  double nextDouble() throws IOException { return Double.parseDouble(nextToken()); }
  char nextChar() throws IOException { return (char) (br.read()); }
  String next() throws IOException { return nextToken(); }
  String nextLine() throws IOException { return br.readLine(); }
  int [] readInt(int size) throws IOException {
    int [] array = new int [size];
    for (int i = 0; i < size; i++) { array[i] = nextInt(); }
    return array;
  }
  long [] readLong(int size) throws IOException {
    long [] array = new long [size];
    for (int i = 0; i < size; i++) { array[i] = nextLong(); }
    return array;
  }
  double [] readDouble(int size) throws IOException {
    double [] array = new double [size];
    for (int i = 0; i < size; i++) { array[i] = nextDouble(); }
    return array;
  }
  String [] readLines(int size) throws IOException {
    String [] array = new String [size];
    for (int i = 0; i < size; i++) { array[i] = nextLine(); }
    return array;
  }

  int gcd(int a, int b) {
    if (a == 0) return Math.abs(b); if (b == 0) return Math.abs(a);
    a = Math.abs(a); b = Math.abs(b);
    int az = Integer.numberOfTrailingZeros(a), bz = Integer.numberOfTrailingZeros(b);
    a >>>= az; b >>>= bz;
    while (a != b) {
      if (a > b) { a -= b; a >>>= Integer.numberOfTrailingZeros(a); }
            else { b -= a; b >>>= Integer.numberOfTrailingZeros(b); }
    }
    return (a << Math.min(az, bz));
  }

  long gcd(long a, long b) {
    if (a == 0) return Math.abs(b); if (b == 0) return Math.abs(a);
    a = Math.abs(a); b = Math.abs(b);
    int az = Long.numberOfTrailingZeros(a), bz = Long.numberOfTrailingZeros(b);
    a >>>= az; b >>>= bz;
    while (a != b) {
      if (a > b) { a -= b; a >>>= Long.numberOfTrailingZeros(a); }
            else { b -= a; b >>>= Long.numberOfTrailingZeros(b); }
    }
    return (a << Math.min(az, bz));
  }

  boolean isPrime(int v) {
    if (v <= 1) { return false; }
    if (v <= 3) { return true; }
    if (((v & 1) == 0) || ((v % 3) == 0)) { return false; }
    for (int m = 5, n = (int)sqrt(v); m <= n; m += 6) { if (((v % m) == 0) || ((v % (m + 2)) == 0)) { return false; } }
    return true;
  }

  void rshuffle(int [] a) { // RANDOM shuffle
    Random r = new Random();
    for (int i = a.length - 1, j, t; i >= 0; j = r.nextInt(a.length), t = a[i], a[i] = a[j], a[j] = t, i--);
  }

  void qshuffle(int [] a) { // QUICK shuffle
    int m = new Random().nextInt(10) + 2;
    for (int i = 0, n = a.length, j = m % n, t; i < n; t = a[i], a[i] = a[j], a[j] = t, i++, j = (i * m) % n);
  }

  void shuffle(long [] a) {
    Random r = new Random();
    for (int i = a.length - 1; i >= 0; i--) {
      int j = r.nextInt(a.length);
      long t = a[i]; a[i] = a[j]; a[j] = t;
    }
  }

  void shuffle(Object [] a) {
    Random r = new Random();
    for (int i = a.length - 1; i >= 0; i--) {
      int j = r.nextInt(a.length);
      Object t = a[i]; a[i] = a[j]; a[j] = t;
    }
  }

  int [] sort(int [] a) {
    final int SHIFT = 16, MASK = (1 << SHIFT) - 1, SIZE = (1 << SHIFT) + 1;
    int n = a.length, ta [] = new int [n], ai [] = new int [SIZE];
    for (int i = 0; i < n; ai[(a[i] & MASK) + 1]++, i++);
    for (int i = 1; i < SIZE; ai[i] += ai[i - 1], i++);
    for (int i = 0; i < n; ta[ai[a[i] & MASK]++] = a[i], i++);
    int [] t = a; a = ta; ta = t;
    ai = new int [SIZE];
    for (int i = 0; i < n; ai[(a[i] >> SHIFT) + 1]++, i++);
    for (int i = 1; i < SIZE; ai[i] += ai[i - 1], i++);
    for (int i = 0; i < n; ta[ai[a[i] >> SHIFT]++] = a[i], i++);
    return ta;
  }

  void flush() {
    pw.flush();
  }

  void pause() {
    flush(); System.console().readLine();
  }
}


import java.io.*;
import java.math.*;
import java.util.*;
import java.util.stream.*;
import java.lang.management.*;
import static java.lang.Math.*;

@SuppressWarnings("unchecked")
public class P1265D {

  public void run() throws Exception {
    int [] sc = { nextInt(), nextInt(), nextInt(), nextInt() };

    for (int cc = 0; cc <= 3; cc++) {
      if (sc[cc] == 0) { continue; }

      int c [] = Arrays.copyOf(sc, 4), tc = c[0] + c[1] + c[2] + c[3] - 1;
      StringBuilder ans = new StringBuilder("YES\n").append(cc).append(' ');
      c[cc]--;

      for (int lc = cc; tc != 0; c[lc]--, tc--) {
        if (lc == 0) {
          if (c[1] != 0) {
            lc = 1;
            ans.append("1 ");
          } else {
            break;
          }
        } else if (lc == 1) {
          if (c[0] != 0) {
            lc = 0;
            ans.append("0 ");
          } else if (c[2] != 0) {
            lc = 2;
            ans.append("2 ");
          } else {
            break;
          }
        } else if (lc == 2) {
          if (c[3] != 0) {
            lc = 3;
            ans.append("3 ");
          } else if (c[1] != 0) {
            lc = 1;
            ans.append("1 ");
          } else {
            break;
          }
        } else { // (lc == 3)
          if (c[2] != 0) {
            lc = 2;
            ans.append("2 ");
          } else {
            break;
          }
        }
      }

      if (tc == 0) {
        println(ans);
        return;
      }
    }

    println("NO");
  }

  public static void main(String... args) throws Exception {
    br = new BufferedReader(new InputStreamReader(System.in));
    pw = new PrintWriter(new BufferedOutputStream(System.out));
    new P1265D().run();
    br.close();
    pw.close();
    System.err.println("\n[Time : " + (System.currentTimeMillis() - startTime) + " ms]");
    long gct = 0, gcc = 0;
    for (GarbageCollectorMXBean garbageCollectorMXBean : ManagementFactory.getGarbageCollectorMXBeans()) {
      gct += garbageCollectorMXBean.getCollectionTime();
      gcc += garbageCollectorMXBean.getCollectionCount();
    }
    System.err.println("[GC time : " + gct + " ms, count = " + gcc + "]");
  }

  static long startTime = System.currentTimeMillis();
  static BufferedReader br;
  static PrintWriter pw;
  StringTokenizer stok;

  String nextToken() throws IOException {
    while (stok == null || !stok.hasMoreTokens()) {
      String s = br.readLine();
      if (s == null) { return null; }
      stok = new StringTokenizer(s);
    }
    return stok.nextToken();
  }

  void print(byte b) { print("" + b); }
  void print(int i) { print("" + i); }
  void print(long l) { print("" + l); }
  void print(double d) { print("" + d); }
  void print(char c) { print("" + c); }
  void print(Object o) {
    if (o instanceof int[]) { print(Arrays.toString((int [])o));
    } else if (o instanceof long[]) { print(Arrays.toString((long [])o));
    } else if (o instanceof char[]) { print(Arrays.toString((char [])o));
    } else if (o instanceof byte[]) { print(Arrays.toString((byte [])o));
    } else if (o instanceof short[]) { print(Arrays.toString((short [])o));
    } else if (o instanceof boolean[]) { print(Arrays.toString((boolean [])o));
    } else if (o instanceof float[]) { print(Arrays.toString((float [])o));
    } else if (o instanceof double[]) { print(Arrays.toString((double [])o));
    } else if (o instanceof Object[]) { print(Arrays.toString((Object [])o));
    } else { print("" + o); }
  }
  void printsp(int [] a) { for (int i = 0, n = a.length; i < n; print(a[i] + " "), i++); }
  void printsp(long [] a) { for (int i = 0, n = a.length; i < n; print(a[i] + " "), i++); }
  void print(String s) { pw.print(s); }
  void println() { println(""); }
  void println(byte b) { println("" + b); }
  void println(int i) { println("" + i); }
  void println(long l) { println("" + l); }
  void println(double d) { println("" + d); }
  void println(char c) { println("" + c); }
  void println(Object o) { print(o); println(); }
  void println(String s) { pw.println(s); }
  int nextInt() throws IOException { return Integer.parseInt(nextToken()); }
  long nextLong() throws IOException { return Long.parseLong(nextToken()); }
  double nextDouble() throws IOException { return Double.parseDouble(nextToken()); }
  char nextChar() throws IOException { return (char) (br.read()); }
  String next() throws IOException { return nextToken(); }
  String nextLine() throws IOException { return br.readLine(); }
  int [] readInt(int size) throws IOException {
    int [] array = new int [size];
    for (int i = 0; i < size; i++) { array[i] = nextInt(); }
    return array;
  }
  long [] readLong(int size) throws IOException {
    long [] array = new long [size];
    for (int i = 0; i < size; i++) { array[i] = nextLong(); }
    return array;
  }
  double [] readDouble(int size) throws IOException {
    double [] array = new double [size];
    for (int i = 0; i < size; i++) { array[i] = nextDouble(); }
    return array;
  }
  String [] readLines(int size) throws IOException {
    String [] array = new String [size];
    for (int i = 0; i < size; i++) { array[i] = nextLine(); }
    return array;
  }

  int gcd(int a, int b) {
    if (a == 0) return Math.abs(b); if (b == 0) return Math.abs(a);
    a = Math.abs(a); b = Math.abs(b);
    int az = Integer.numberOfTrailingZeros(a), bz = Integer.numberOfTrailingZeros(b);
    a >>>= az; b >>>= bz;
    while (a != b) {
      if (a > b) { a -= b; a >>>= Integer.numberOfTrailingZeros(a); }
            else { b -= a; b >>>= Integer.numberOfTrailingZeros(b); }
    }
    return (a << Math.min(az, bz));
  }

  long gcd(long a, long b) {
    if (a == 0) return Math.abs(b); if (b == 0) return Math.abs(a);
    a = Math.abs(a); b = Math.abs(b);
    int az = Long.numberOfTrailingZeros(a), bz = Long.numberOfTrailingZeros(b);
    a >>>= az; b >>>= bz;
    while (a != b) {
      if (a > b) { a -= b; a >>>= Long.numberOfTrailingZeros(a); }
            else { b -= a; b >>>= Long.numberOfTrailingZeros(b); }
    }
    return (a << Math.min(az, bz));
  }

  boolean isPrime(int v) {
    if (v <= 1) { return false; }
    if (v <= 3) { return true; }
    if (((v & 1) == 0) || ((v % 3) == 0)) { return false; }
    for (int m = 5, n = (int)sqrt(v); m <= n; m += 6) { if (((v % m) == 0) || ((v % (m + 2)) == 0)) { return false; } }
    return true;
  }

  void rshuffle(int [] a) { // RANDOM shuffle
    Random r = new Random();
    for (int i = a.length - 1, j, t; i >= 0; j = r.nextInt(a.length), t = a[i], a[i] = a[j], a[j] = t, i--);
  }

  void qshuffle(int [] a) { // QUICK shuffle
    int m = new Random().nextInt(10) + 2;
    for (int i = 0, n = a.length, j = m % n, t; i < n; t = a[i], a[i] = a[j], a[j] = t, i++, j = (i * m) % n);
  }

  void shuffle(long [] a) {
    Random r = new Random();
    for (int i = a.length - 1; i >= 0; i--) {
      int j = r.nextInt(a.length);
      long t = a[i]; a[i] = a[j]; a[j] = t;
    }
  }

  void shuffle(Object [] a) {
    Random r = new Random();
    for (int i = a.length - 1; i >= 0; i--) {
      int j = r.nextInt(a.length);
      Object t = a[i]; a[i] = a[j]; a[j] = t;
    }
  }

  int [] sort(int [] a) {
    final int SHIFT = 16, MASK = (1 << SHIFT) - 1, SIZE = (1 << SHIFT) + 1;
    int n = a.length, ta [] = new int [n], ai [] = new int [SIZE];
    for (int i = 0; i < n; ai[(a[i] & MASK) + 1]++, i++);
    for (int i = 1; i < SIZE; ai[i] += ai[i - 1], i++);
    for (int i = 0; i < n; ta[ai[a[i] & MASK]++] = a[i], i++);
    int [] t = a; a = ta; ta = t;
    ai = new int [SIZE];
    for (int i = 0; i < n; ai[(a[i] >> SHIFT) + 1]++, i++);
    for (int i = 1; i < SIZE; ai[i] += ai[i - 1], i++);
    for (int i = 0; i < n; ta[ai[a[i] >> SHIFT]++] = a[i], i++);
    return ta;
  }

  void flush() {
    pw.flush();
  }

  void pause() {
    flush(); System.console().readLine();
  }
}


import java.io.*;
import java.math.*;
import java.util.*;
import java.util.stream.*;
import java.lang.management.*;
import static java.lang.Math.*;

@SuppressWarnings("unchecked")
public class P1265D {

  public void run() throws Exception {
    int [] sc = { nextInt(), nextInt(), nextInt(), nextInt() };

    for (int cc = 0; cc <= 3; cc++) {
      int [] c = Arrays.copyOf(sc, 4);
      StringBuilder ans = new StringBuilder("YES\n").append(cc).append(' ');
      c[cc]--;

      for (int lc = cc; (c[0] | c[1] | c[2] | c[3]) != 0; c[lc]--) {
        if (lc == 0) {
          if (c[1] != 0) {
            lc = 1;
            ans.append("1 ");
          } else {
            break;
          }
        } else if (lc == 1) {
          if (c[0] != 0) {
            lc = 0;
            ans.append("0 ");
          } else if (c[2] != 0) {
            lc = 2;
            ans.append("2 ");
          } else {
            break;
          }
        } else if (lc == 2) {
          if (c[3] != 0) {
            lc = 3;
            ans.append("3 ");
          } else if (c[1] != 0) {
            lc = 1;
            ans.append("1 ");
          } else {
            break;
          }
        } else { // (lc == 3)
          if (c[2] != 0) {
            lc = 2;
            ans.append("2 ");
          } else {
            break;
          }
        }
      }

      if ((c[0] | c[1] | c[2] | c[3]) == 0) {
        println(ans);
        return;
      }
    }

    println("NO");
  }

  public static void main(String... args) throws Exception {
    br = new BufferedReader(new InputStreamReader(System.in));
    pw = new PrintWriter(new BufferedOutputStream(System.out));
    new P1265D().run();
    br.close();
    pw.close();
    System.err.println("\n[Time : " + (System.currentTimeMillis() - startTime) + " ms]");
    long gct = 0, gcc = 0;
    for (GarbageCollectorMXBean garbageCollectorMXBean : ManagementFactory.getGarbageCollectorMXBeans()) {
      gct += garbageCollectorMXBean.getCollectionTime();
      gcc += garbageCollectorMXBean.getCollectionCount();
    }
    System.err.println("[GC time : " + gct + " ms, count = " + gcc + "]");
  }

  static long startTime = System.currentTimeMillis();
  static BufferedReader br;
  static PrintWriter pw;
  StringTokenizer stok;

  String nextToken() throws IOException {
    while (stok == null || !stok.hasMoreTokens()) {
      String s = br.readLine();
      if (s == null) { return null; }
      stok = new StringTokenizer(s);
    }
    return stok.nextToken();
  }

  void print(byte b) { print("" + b); }
  void print(int i) { print("" + i); }
  void print(long l) { print("" + l); }
  void print(double d) { print("" + d); }
  void print(char c) { print("" + c); }
  void print(Object o) {
    if (o instanceof int[]) { print(Arrays.toString((int [])o));
    } else if (o instanceof long[]) { print(Arrays.toString((long [])o));
    } else if (o instanceof char[]) { print(Arrays.toString((char [])o));
    } else if (o instanceof byte[]) { print(Arrays.toString((byte [])o));
    } else if (o instanceof short[]) { print(Arrays.toString((short [])o));
    } else if (o instanceof boolean[]) { print(Arrays.toString((boolean [])o));
    } else if (o instanceof float[]) { print(Arrays.toString((float [])o));
    } else if (o instanceof double[]) { print(Arrays.toString((double [])o));
    } else if (o instanceof Object[]) { print(Arrays.toString((Object [])o));
    } else { print("" + o); }
  }
  void printsp(int [] a) { for (int i = 0, n = a.length; i < n; print(a[i] + " "), i++); }
  void printsp(long [] a) { for (int i = 0, n = a.length; i < n; print(a[i] + " "), i++); }
  void print(String s) { pw.print(s); }
  void println() { println(""); }
  void println(byte b) { println("" + b); }
  void println(int i) { println("" + i); }
  void println(long l) { println("" + l); }
  void println(double d) { println("" + d); }
  void println(char c) { println("" + c); }
  void println(Object o) { print(o); println(); }
  void println(String s) { pw.println(s); }
  int nextInt() throws IOException { return Integer.parseInt(nextToken()); }
  long nextLong() throws IOException { return Long.parseLong(nextToken()); }
  double nextDouble() throws IOException { return Double.parseDouble(nextToken()); }
  char nextChar() throws IOException { return (char) (br.read()); }
  String next() throws IOException { return nextToken(); }
  String nextLine() throws IOException { return br.readLine(); }
  int [] readInt(int size) throws IOException {
    int [] array = new int [size];
    for (int i = 0; i < size; i++) { array[i] = nextInt(); }
    return array;
  }
  long [] readLong(int size) throws IOException {
    long [] array = new long [size];
    for (int i = 0; i < size; i++) { array[i] = nextLong(); }
    return array;
  }
  double [] readDouble(int size) throws IOException {
    double [] array = new double [size];
    for (int i = 0; i < size; i++) { array[i] = nextDouble(); }
    return array;
  }
  String [] readLines(int size) throws IOException {
    String [] array = new String [size];
    for (int i = 0; i < size; i++) { array[i] = nextLine(); }
    return array;
  }

  int gcd(int a, int b) {
    if (a == 0) return Math.abs(b); if (b == 0) return Math.abs(a);
    a = Math.abs(a); b = Math.abs(b);
    int az = Integer.numberOfTrailingZeros(a), bz = Integer.numberOfTrailingZeros(b);
    a >>>= az; b >>>= bz;
    while (a != b) {
      if (a > b) { a -= b; a >>>= Integer.numberOfTrailingZeros(a); }
            else { b -= a; b >>>= Integer.numberOfTrailingZeros(b); }
    }
    return (a << Math.min(az, bz));
  }

  long gcd(long a, long b) {
    if (a == 0) return Math.abs(b); if (b == 0) return Math.abs(a);
    a = Math.abs(a); b = Math.abs(b);
    int az = Long.numberOfTrailingZeros(a), bz = Long.numberOfTrailingZeros(b);
    a >>>= az; b >>>= bz;
    while (a != b) {
      if (a > b) { a -= b; a >>>= Long.numberOfTrailingZeros(a); }
            else { b -= a; b >>>= Long.numberOfTrailingZeros(b); }
    }
    return (a << Math.min(az, bz));
  }

  boolean isPrime(int v) {
    if (v <= 1) { return false; }
    if (v <= 3) { return true; }
    if (((v & 1) == 0) || ((v % 3) == 0)) { return false; }
    for (int m = 5, n = (int)sqrt(v); m <= n; m += 6) { if (((v % m) == 0) || ((v % (m + 2)) == 0)) { return false; } }
    return true;
  }

  void rshuffle(int [] a) { // RANDOM shuffle
    Random r = new Random();
    for (int i = a.length - 1, j, t; i >= 0; j = r.nextInt(a.length), t = a[i], a[i] = a[j], a[j] = t, i--);
  }

  void qshuffle(int [] a) { // QUICK shuffle
    int m = new Random().nextInt(10) + 2;
    for (int i = 0, n = a.length, j = m % n, t; i < n; t = a[i], a[i] = a[j], a[j] = t, i++, j = (i * m) % n);
  }

  void shuffle(long [] a) {
    Random r = new Random();
    for (int i = a.length - 1; i >= 0; i--) {
      int j = r.nextInt(a.length);
      long t = a[i]; a[i] = a[j]; a[j] = t;
    }
  }

  void shuffle(Object [] a) {
    Random r = new Random();
    for (int i = a.length - 1; i >= 0; i--) {
      int j = r.nextInt(a.length);
      Object t = a[i]; a[i] = a[j]; a[j] = t;
    }
  }

  int [] sort(int [] a) {
    final int SHIFT = 16, MASK = (1 << SHIFT) - 1, SIZE = (1 << SHIFT) + 1;
    int n = a.length, ta [] = new int [n], ai [] = new int [SIZE];
    for (int i = 0; i < n; ai[(a[i] & MASK) + 1]++, i++);
    for (int i = 1; i < SIZE; ai[i] += ai[i - 1], i++);
    for (int i = 0; i < n; ta[ai[a[i] & MASK]++] = a[i], i++);
    int [] t = a; a = ta; ta = t;
    ai = new int [SIZE];
    for (int i = 0; i < n; ai[(a[i] >> SHIFT) + 1]++, i++);
    for (int i = 1; i < SIZE; ai[i] += ai[i - 1], i++);
    for (int i = 0; i < n; ta[ai[a[i] >> SHIFT]++] = a[i], i++);
    return ta;
  }

  void flush() {
    pw.flush();
  }

  void pause() {
    flush(); System.console().readLine();
  }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) throws IOException {
        FastScanner input = new FastScanner(System.in);
        PrintWriter output = new PrintWriter(System.out);

        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        int d = input.nextInt();

        int one = b - a;
        int two = c - d;
        if (a <= b && c >= d && (one == two || one + 1 == two || one == two + 1)) {
            int[] numbers = new int[a + b + c + d];
            int size = 0;
            if (one > two)
                numbers[size++] = 1;
            for (int i = 0; i < a; i++) {
                numbers[size++] = 0;
                numbers[size++] = 1;
            }
            for (int i = 0; i < Math.min(one, two); i++) {
                numbers[size++] = 2;
                numbers[size++] = 1;
            }
            for (int i = 0; i < d; i++) {
                numbers[size++] = 2;
                numbers[size++] = 3;

            }
            if (one < two)
                numbers[size++] = 2;

            output.print("YES\n" + numbers[0]);
            for (int i = 1; i < size; i++)
                output.print(" " + numbers[i]);

            output.println();
        } else {
            output.println("NO");
        }

        output.close();
    }

    static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        FastScanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }

        FastScanner(FileReader s) {
            br = new BufferedReader(s);
        }

        String next() throws IOException {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        String nextLine() throws IOException {
            return br.readLine();
        }

        double nextDouble() throws IOException {
            return Double.parseDouble(next());
        }

        int nextInt() throws IOException {
            return Integer.parseInt(next());
        }

        long nextLong() throws IOException {
            return Long.parseLong(next());
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) throws IOException {
        FastScanner input = new FastScanner(System.in);
        PrintWriter output = new PrintWriter(System.out);

        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        int d = input.nextInt();

        int one = b - a;
        int two = c - d;
        int[] numbers = new int[a + b + c + d];
        int size = 0;
        boolean solved = true;
        if (a <= b && c >= d && (one == two || one + 1 == two || one == two + 1)) {
            if (one > two)
                numbers[size++] = 1;
            for (int i = 0; i < a; i++) {
                numbers[size++] = 0;
                numbers[size++] = 1;
            }
            for (int i = 0; i < Math.min(one, two); i++) {
                numbers[size++] = 2;
                numbers[size++] = 1;
            }
            for (int i = 0; i < d; i++) {
                numbers[size++] = 2;
                numbers[size++] = 3;
            }
            if (one < two)
                numbers[size++] = 2;

        } else if (a == b && a == 0 && c + 1 == d) {
            numbers[size++] = 3;

            for (int i = 0; i < c; i++) {
                numbers[size++] = 2;
                numbers[size++] = 3;
            }
        } else if (a == b + 1 && c == d && c == 0) {
            numbers[size++] = 0;

            for (int i = 0; i < b; i++) {
                numbers[size++] = 1;
                numbers[size++] = 0;
            }
        } else {
            solved = false;
        }

        if (solved) {
            output.print("YES\n" + numbers[0]);
            for (int i = 1; i < size; i++)
                output.print(" " + numbers[i]);

            output.println();
        } else {
            output.println("NO");

        }
        output.close();
    }

    static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        FastScanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }

        FastScanner(FileReader s) {
            br = new BufferedReader(s);
        }

        String next() throws IOException {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        String nextLine() throws IOException {
            return br.readLine();
        }

        double nextDouble() throws IOException {
            return Double.parseDouble(next());
        }

        int nextInt() throws IOException {
            return Integer.parseInt(next());
        }

        long nextLong() throws IOException {
            return Long.parseLong(next());
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) throws IOException {
        FastScanner input = new FastScanner(System.in);
        PrintWriter output = new PrintWriter(System.out);

        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        int d = input.nextInt();

        int one = b - a;
        int two = c - d;
        if (a <= b && c >= d && (one == two || one + 1 == two || one == two + 1)) {
            int[] numbers = new int[a + b + c + d];
            int size = 0;
            if (one > two)
                numbers[size++] = 1;
            for (int i = 0; i < a; i++) {
                numbers[size++] = 0;
                numbers[size++] = 1;
            }
            for (int i = 0; i < Math.min(one, two); i++) {
                numbers[size++] = 2;
                numbers[size++] = 1;
            }
            for (int i = 0; i < two; i++) {
                numbers[size++] = 2;
                numbers[size++] = 3;

            }
            if (one < two)
                numbers[size++] = 2;

            output.print("YES\n" + numbers[0]);
            for (int i = 1; i < size; i++)
                output.print(" " + numbers[i]);

            output.println();
        } else {
            output.println("NO");
        }

        output.close();
    }

    static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        FastScanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }

        FastScanner(FileReader s) {
            br = new BufferedReader(s);
        }

        String next() throws IOException {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        String nextLine() throws IOException {
            return br.readLine();
        }

        double nextDouble() throws IOException {
            return Double.parseDouble(next());
        }

        int nextInt() throws IOException {
            return Integer.parseInt(next());
        }

        long nextLong() throws IOException {
            return Long.parseLong(next());
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) throws IOException {
        FastScanner input = new FastScanner(System.in);
        PrintWriter output = new PrintWriter(System.out);

        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        int d = input.nextInt();

        int one = b - a;
        int two = c - d;
        if (a <= b && c >= d && (one == two || one + 1 == two || one == two + 1)) {
            int[] numbers = new int[a + b + c + d];
            int size = 0;
            if (one > two)
                numbers[size++] = 1;
            for (int i = 0; i < a; i++) {
                numbers[size++] = 0;
                numbers[size++] = 1;
            }
            for (int i = 0; i < Math.min(one, two); i++) {
                numbers[size++] = 2;
                numbers[size++] = 1;
            }
            for (int i = 0; i < two; i++) {
                numbers[size++] = 2;
                numbers[size++] = 3;

            }
            if (one < two)
                numbers[size++] = 2;

            System.out.print("YES\n" + numbers[0]);
            for (int i = 1; i < size; i++)
                System.out.print(" " + numbers[i]);

            System.out.println();
        } else {
            System.out.println("NO");
        }

        output.close();
    }

    static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        FastScanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }

        FastScanner(FileReader s) {
            br = new BufferedReader(s);
        }

        String next() throws IOException {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        String nextLine() throws IOException {
            return br.readLine();
        }

        double nextDouble() throws IOException {
            return Double.parseDouble(next());
        }

        int nextInt() throws IOException {
            return Integer.parseInt(next());
        }

        long nextLong() throws IOException {
            return Long.parseLong(next());
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) {
        FastScanner scanner = new FastScanner();
        PrintWriter out = new PrintWriter(System.out, false);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int d = scanner.nextInt();
        int pa = a, pb = b, pc =  c, pd = d;
        int n = a + b + c + d;
        if (a + b + c + d == 1) {
            out.println("YES");
            if (a == 1) out.println(0);
            if (b == 1) out.println(1);
            if (c == 1) out.println(2);
            if (d == 1) out.println(3);
            out.flush();
            return;
        }
        int v = Math.min(a,b);
        ArrayList<Integer> ans = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < v; i++) {
            sb.append("0 1 ");
            ans.add(0); ans.add(1);
        }
        b-=v;
        a-=v;
        v = Math.max(Math.min(b, c-d),0);
        for(int i = 0; i < v; i++) {
            sb.append("2 1 ");
            ans.add(2); ans.add(1);
        }
        c-= v;
        b-= v;
        v = Math.min(c,d);
        for(int i = 0; i < v; i++) {
            ans.add(2);ans.add(3);
            sb.append("2 3 "); }
        c -= v;
        d -= v;
        if (c > 0) {
            ans.add(2);
            c--;
            sb.append("2");
        }
        if (b > 0) {
            b--;
            ans.add(0, 1);
            sb.insert(0, "1 ");
        }
        if (a > 0 && ans.get(ans.size()-1) == 1) {
            a--;
            ans.add(0);
            sb.append("0");
        }
        if (d > 0 && ans.get(0) == 2) {
            d--;
            ans.add(0, 3);
            sb.insert(0, "3 ");
        }
        if (a == 0 && b == 0 && c == 0 && d == 0 && ans.size() == n) {
            int[] cnt = new int[4];
            cnt[ans.get(0)]++;
            for(int i = 1; i < ans.size(); i++) {
                if (Math.abs(ans.get(i) - ans.get(i-1)) != 1) bad();
                cnt[ans.get(i)]++;
            }
            if (cnt[0] != pa) bad();
            if (cnt[1] != pb) bad();
            if (cnt[2] != pc) bad();
            if (cnt[3] != pd) bad();
            out.println("YES");
            out.println(sb.toString());
        }
        else bad();
        out.flush();
    }
    static void bad() {
        System.out.println("NO");
        System.exit(0);
    }
    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(Reader in) {
            br = new BufferedReader(in);
        }

        public FastScanner() {
            this(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String readNextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) {
        FastScanner scanner = new FastScanner();
        PrintWriter out = new PrintWriter(System.out, false);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int d = scanner.nextInt();
        if (a > b) bad();
        ArrayList<Integer> ans = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < a; i++) {
            sb.append("0 1 ");
            ans.add(0); ans.add(1);
        }
        b-=a;
        a = 0;
        if (b > c) bad();
        int v = Math.max(Math.min(b,c-1),0);
        for(int i = 0; i < v; i++) {
            sb.append("2 1 ");
            ans.add(2); ans.add(1);
        }
        c-= v;
        b-= v;
        if (d > c) bad();
        for(int i = 0; i < d; i++) {
            ans.add(2);ans.add(3);
            sb.append("2 3 "); }
        c -= d;
        d = 0;
        if (c > 0) {
            ans.add(2);
            c--;
            sb.append("2");
        }
        if (b > 0) {
            b--;
            ans.add(0, 1);
            sb.insert(0, "1 ");
        }
        if (a == 0 && b == 0 && c == 0 && d == 0) {
            for(int i = 1; i < ans.size(); i++) {
                if (Math.abs(ans.get(i) - ans.get(i-1)) != 1) bad();
            }
            out.println("YES");
            out.println(sb.toString());
        }
        else bad();
        out.flush();
    }
    static void bad() {
        System.out.println("NO");
        System.exit(0);
    }
    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(Reader in) {
            br = new BufferedReader(in);
        }

        public FastScanner() {
            this(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String readNextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) {
        FastScanner scanner = new FastScanner();
        PrintWriter out = new PrintWriter(System.out, false);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int d = scanner.nextInt();
        int pa = a, pb = b, pc =  c, pd = d;
        int n = a + b + c + d;
        if (a + b + c + d == 1) {
            out.println("YES");
            if (a == 1) out.println(0);
            if (b == 1) out.println(1);
            if (c == 1) out.println(2);
            if (d == 1) out.println(3);
            out.flush();
            return;
        }
        int v = Math.min(a,b);
        ArrayList<Integer> ans = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < v; i++) {
            sb.append("0 1 ");
            ans.add(0); ans.add(1);
        }
        b-=v;
        a-=v;
        v = Math.max(Math.min(b, c-d),0);
        for(int i = 0; i < v; i++) {
            sb.append("2 1 ");
            ans.add(2); ans.add(1);
        }
        c-= v;
        b-= v;
        v = Math.min(c,d);
        for(int i = 0; i < v; i++) {
            ans.add(2);ans.add(3);
            sb.append("2 3 "); }
        c -= v;
        d -= v;
        if (c > 0) {
            ans.add(2);
            c--;
            sb.append("2");
        }
        if (b > 0) {
            b--;
            ans.add(0, 1);
            sb.insert(0, "1 ");
        }
        if (a > 0 && ans.size() > 0 && ans.get(ans.size()-1) == 1) {
            a--;
            ans.add(0);
            sb.append("0");
        }
        if (d > 0 && ans.size() > 0 && ans.get(0) == 2) {
            d--;
            ans.add(0, 3);
            sb.insert(0, "3 ");
        }
        if (a == 0 && b == 0 && c == 0 && d == 0 && ans.size() == n) {
            int[] cnt = new int[4];
            cnt[ans.get(0)]++;
            for(int i = 1; i < ans.size(); i++) {
                if (Math.abs(ans.get(i) - ans.get(i-1)) != 1) bad();
                cnt[ans.get(i)]++;
            }
            if (cnt[0] != pa) bad();
            if (cnt[1] != pb) bad();
            if (cnt[2] != pc) bad();
            if (cnt[3] != pd) bad();
            out.println("YES");
            out.println(sb.toString());
        }
        else bad();
        out.flush();
    }
    static void bad() {
        System.out.println("NO");
        System.exit(0);
    }
    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(Reader in) {
            br = new BufferedReader(in);
        }

        public FastScanner() {
            this(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String readNextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) {
        FastScanner scanner = new FastScanner();
        PrintWriter out = new PrintWriter(System.out, false);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int d = scanner.nextInt();
        if (a + b + c + d == 1) {
            out.println("YES");
            if (a == 1) out.println(0);
            if (b == 1) out.println(1);
            if (c == 1) out.println(2);
            if (d == 1) out.println(3);
            out.flush();
            return;
        }
        if (a > b) bad();
        ArrayList<Integer> ans = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < a; i++) {
            sb.append("0 1 ");
            ans.add(0); ans.add(1);
        }
        b-=a;
        a = 0;
        if (b > c) bad();
        int v = Math.max(Math.min(b,c-1),0);
        for(int i = 0; i < v; i++) {
            sb.append("2 1 ");
            ans.add(2); ans.add(1);
        }
        c-= v;
        b-= v;
        if (d > c) bad();
        for(int i = 0; i < d; i++) {
            ans.add(2);ans.add(3);
            sb.append("2 3 "); }
        c -= d;
        d = 0;
        if (c > 0) {
            ans.add(2);
            c--;
            sb.append("2");
        }
        if (b > 0) {
            b--;
            ans.add(0, 1);
            sb.insert(0, "1 ");
        }
        if (a == 0 && b == 0 && c == 0 && d == 0) {
            for(int i = 1; i < ans.size(); i++) {
                if (Math.abs(ans.get(i) - ans.get(i-1)) != 1) bad();
            }
            out.println("YES");
            out.println(sb.toString());
        }
        else bad();
        out.flush();
    }
    static void bad() {
        System.out.println("NO");
        System.exit(0);
    }
    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(Reader in) {
            br = new BufferedReader(in);
        }

        public FastScanner() {
            this(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String readNextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}


import java.util.*;
import java.io.*;

public class D {
    public static void main(String[] args) {
        FastScanner scanner = new FastScanner();
        PrintWriter out = new PrintWriter(System.out, false);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int d = scanner.nextInt();
        int pa = a, pb = b, pc =  c, pd = d;
        int n = a + b + c + d;
        if (a + b + c + d == 1) {
            out.println("YES");
            if (a == 1) out.println(0);
            if (b == 1) out.println(1);
            if (c == 1) out.println(2);
            if (d == 1) out.println(3);
            out.flush();
            return;
        }
        int v = Math.min(a,b);
        ArrayList<Integer> ans = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < v; i++) {
            sb.append("0 1 ");
            ans.add(0); ans.add(1);
        }
        b-=v;
        a-=v;
        v = Math.max(Math.min(b,d > 0 ? c-1: c),0);
        for(int i = 0; i < v; i++) {
            sb.append("2 1 ");
            ans.add(2); ans.add(1);
        }
        c-= v;
        b-= v;
        v = Math.min(c,d);
        for(int i = 0; i < v; i++) {
            ans.add(2);ans.add(3);
            sb.append("2 3 "); }
        c -= v;
        d -= v;
        if (c > 0) {
            ans.add(2);
            c--;
            sb.append("2");
        }
        if (b > 0) {
            b--;
            ans.add(0, 1);
            sb.insert(0, "1 ");
        }
        if (a > 0 && ans.get(ans.size()-1) == 1) {
            a--;
            ans.add(0);
            sb.append("0");
        }
        if (d > 0 && ans.get(0) == 2) {
            d--;
            ans.add(0, 3);
            sb.insert(0, "3 ");
        }
        if (a == 0 && b == 0 && c == 0 && d == 0 && ans.size() == n) {
            int[] cnt = new int[4];
            cnt[ans.get(0)]++;
            for(int i = 1; i < ans.size(); i++) {
                if (Math.abs(ans.get(i) - ans.get(i-1)) != 1) bad();
                cnt[ans.get(i)]++;
            }
            if (cnt[0] != pa) bad();
            if (cnt[1] != pb) bad();
            if (cnt[2] != pc) bad();
            if (cnt[3] != pd) bad();
            out.println("YES");
            out.println(sb.toString());
        }
        else bad();
        out.flush();
    }
    static void bad() {
        System.out.println("NO");
        System.exit(0);
    }
    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(Reader in) {
            br = new BufferedReader(in);
        }

        public FastScanner() {
            this(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String readNextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}


import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.*;

import static java.lang.Math.*;

public class Solution implements Runnable
{
	static class InputReader
	{
		private InputStream stream;private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;
		private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        public InputReader(InputStream stream){this.stream = stream;}
		public int read(){if (numChars==-1) throw new InputMismatchException();if (curChar >= numChars){curChar = 0;try{numChars = stream.read(buf);}catch (IOException e){throw new InputMismatchException();	}if(numChars <= 0)return -1;}return buf[curChar++];}
     	public String nextLine(){String str = "";try{str = br.readLine();}catch (IOException e){e.printStackTrace();}return str;}
		public int nextInt(){int c = read();	while(isSpaceChar(c))c = read();	int sgn = 1; if (c == '-'){sgn = -1;c = read();	}int res = 0;do{if(c<'0'||c>'9') throw new InputMismatchException();res *= 10;res += c - '0';c = read();}while (!isSpaceChar(c));return res * sgn;}
        public long nextLong(){int c = read();while (isSpaceChar(c))c = read();int sgn = 1;if (c == '-'){sgn = -1;c = read();}long res = 0;do{if (c < '0' || c > '9')throw new InputMismatchException();res *= 10;res += c - '0';c = read();}while (!isSpaceChar(c));return res * sgn;}
		public double nextDouble(){int c = read();while (isSpaceChar(c))c = read();int sgn = 1;if (c == '-'){sgn = -1;c = read();}double res = 0;while (!isSpaceChar(c) && c != '.'){if (c == 'e' || c == 'E')return res * Math.pow(10, nextInt());if (c < '0' || c > '9')
		throw new InputMismatchException();res *= 10;res += c - '0';c = read();}if (c == '.'){c = read();double m = 1;while (!isSpaceChar(c)){if (c == 'e' || c == 'E')return res * Math.pow(10, nextInt());if (c < '0' || c > '9')throw new InputMismatchException();m /= 10;res += (c - '0') * m;c = read();}}return res * sgn;}
        public String readString(){int c = read();while (isSpaceChar(c))c = read();StringBuilder res = new StringBuilder();do{res.appendCodePoint(c);c = read();}while (!isSpaceChar(c));return res.toString();}
		public boolean isSpaceChar(int c){if (filter != null)return filter.isSpaceChar(c);return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;}
		public String next(){return readString();}
        public interface SpaceCharFilter{public boolean isSpaceChar(int ch);}
	}

	public static void main(String args[]) throws Exception{new Thread(null, new Solution(),"Main",1<<27).start();}

	public static long gcd(long a, long b) { 	if (a == 0) return b; return gcd(b % a, a);}

	public static long findGCD(long arr[], int n) { 	long result = arr[0]; for (int i = 1; i < n; i++) result = gcd(arr[i], result);return result; }

	static void sortbycolomn(long arr[][], int col)
    {
        Arrays.sort(arr, new Comparator<long[]>() {
        @Override
        public int compare(final long[] entry1,final long[] entry2) {
            if (entry1[col] > entry2[col])return 1;
            else return -1;
        }
        });
    }

	public void run()
    {
        InputReader in = new InputReader(System.in);
        PrintWriter w = new PrintWriter(System.out);

		int a=in.nextInt();
		int b=in.nextInt();
		int c=in.nextInt();
		int d=in.nextInt();

		if(b==a-1){
		    if(c!=0 || d!=0)
		        w.println("NO");
		    else{
		        w.println("YES");
		        int[] arr=new int[a+b];
		        for(int i=0;i<a+b;i+=2)
		            arr[i]=0;
		        for(int i=1;i<b+a;i+=2)
		            arr[i]=1;
		        for(int i=0;i<a+b;i++)
		            w.print(arr[i]+" ");
		            w.println();
		    }
		}
		else if(b<a-1)
		    w.println("NO");
		else if(d==c+1){
		    if(a!=0 || b!=0)
		        w.println("NO");
		    else{
		        int[] arr=new int[c+d];
		        for(int i=0;i<c+d;i+=2)
		            arr[i]=3;
		        for(int i=1;i<d+c;i+=2)
		            arr[i]=2;
		        for(int i=0;i<c+d;i++)
		            w.print(arr[i]+" ");
		            w.println();
		    }
		}
		else if(d>c+1)
		    w.println("NO");
		else{
		    int restab=b-a;
		    int restcd=c-d;
		    if(restcd==restab){
		        w.println("YES");
		        int[] arr=new int[a+b+c+d];
		        Arrays.fill(arr,-1);
		        int temp=a;
		        for(int i=0;temp>0;i+=2,temp--)
		            arr[i]=0;
		        temp=b;
		        for(int i=1;temp>0;i+=2,temp--)
		            arr[i]=1;
		        temp=c;
		        for(int i=a*2;temp>0;i+=2,temp--)
		            arr[i]=2;
		        for(int i=0;i<(a+b+c+d);i++){
		            if(arr[i]==-1)
		                w.print("3 ");
		            else
		                w.print(arr[i]+" ");
		        }
		        w.println();
		    }
		    else if(restab!=0 && restcd==restab-1){
		        w.println("YES");
		        int[] arr=new int[a+b+c+d];
		        Arrays.fill(arr,-1);
		        int temp=b;
		        for(int i=0;temp>0;i+=2,temp--)
		            arr[i]=1;
		        temp=a;
		        for(int i=1;temp>0;i+=2,temp--)
		            arr[i]=0;
		        temp=c;
		        for(int i=(a*2+1);temp>0;i+=2,temp--)
		            arr[i]=2;
		        for(int i=0;i<(a+b+c+d);i++){
		            if(arr[i]==-1)
		                w.print("3 ");
		            else
		                w.print(arr[i]+" ");
		        }
		        w.println();
		    }
		    else if(restcd==restab+1){
		        w.println("YES");
		        int[] arr=new int[a+b+c+d-1];
		        Arrays.fill(arr,-1);
		        int temp=a;
		        for(int i=0;temp>0;i+=2,temp--)
		            arr[i]=0;
		        temp=b;
		        for(int i=1;temp>0;i+=2,temp--)
		            arr[i]=1;
		        temp=c-1;
		        for(int i=a*2;temp>0;i+=2,temp--)
		            arr[i]=2;
		        for(int i=0;i<(a+b+c+d-1);i++){
		            if(arr[i]==-1)
		                w.print("3 ");
		            else
		                w.print(arr[i]+" ");
		        }
		        w.println("2 ");
		    }
		    else
		        w.println("NO");
		}

	    w.flush();
        w.close();
    }
}