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

public class Main {

    void run(FastIO io) {
        int a = io.nextInt(), b = io.nextInt(), c = io.nextInt(), d = io.nextInt(), min;
        StringBuilder sb = new StringBuilder();
        //boolean end = false;

        int a1 = a, b1 = b, c1 = c, d1 = d;
        min = Math.min(a, b);
        a1 -= min;
        b1 -= min;
        min = Math.min(c, d);
        c1 -= min;
        d1 -= min;
        min = Math.min(c, b);
        c1 -= min;
        b1 -= min;

        if (a1 > 0 || b1 > 1 || c1 > 1 || d1 > 0) io.print("NO");
        else {
            if (b1 == 1) {
                sb.append("1 ");
                b--;
            }
            while (a > 0) {
                sb.append("0 ");
                a--;
                if (b > 0) {
                    sb.append("1 ");
                    b--;
                }
            }
            if (c > 0) {
                sb.append("2 ");
                c--;
            }
            while (b > 0) {
                sb.append("1 ");
                b--;
                if (c > 0) {
                    sb.append("2 ");
                    c--;
                }
            }
            if (d > 0) {
                sb.append("3 ");
                d--;
            }
            while (c > 0) {
                sb.append("2 ");
                c--;
                if (d > 0) {
                    sb.append("3 ");
                    d--;
                }
            }

            io.print("YES\r\n" + sb.toString());
        }
    }

    public static void main(String[] args) throws InterruptedException {
        try (FastIO io = new FastIO(System.in, System.out)) {
            Thread t = new Thread(null, () -> new Main().run(io), "", (long) 3e7);
            t.start();
            t.join();
        }
    }

    static class FastIO extends PrintWriter {
        BufferedReader br;
        StringTokenizer stok;

        FastIO(InputStream is, OutputStream os) {
            super(os, false);
            br = new BufferedReader(new InputStreamReader(is));
            stok = new StringTokenizer("");
        }

        String nextToken() {
            while (!stok.hasMoreTokens()) {
                String s;
                try {
                    s = br.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (s == null) {
                    return null;
                }
                stok = new StringTokenizer(s);
            }
            return stok.nextToken();
        }

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

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

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


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

public class Main {

    void run(FastIO io) {
        int a = io.nextInt(), b = io.nextInt(), c = io.nextInt(), d = io.nextInt();
        StringBuilder sb = new StringBuilder();

        if (a > b && (c > 0 || d > 0) || d > c && (a > 0 || b > 0)) io.print("NO");
        else {
            io.println("YES");

            while (a > 0) {
                sb.append("0 ");
//                if (b > 0)
                sb.append("1 ");
                a--;
                b--;
            }
            while (b > 0) {
//                if (c > 0)
                sb.append("2 ");
                sb.append("1 ");
                c--;
                b--;
            }
            while (c > 0) {
                sb.append("2 ");
                if (d > 0) {
                    sb.append("3 ");
                    d--;
                }
                c--;
            }

            io.print(sb.toString());
        }
    }

    class Pair implements Comparable<Pair> {
        int v, d;

        public Pair(int a, int b) {
            v = a;
            d = b;
        }

        @Override
        public int compareTo(Pair o) {
            if (d < o.d) return -1;
            return 1;
        }
    }

    public static void main(String[] args) throws InterruptedException {
        try (FastIO io = new FastIO(System.in, System.out)) {
            Thread t = new Thread(null, () -> new Main().run(io), "", (long) 3e7);
            t.start();
            t.join();
        }
    }

    static class FastIO extends PrintWriter {
        BufferedReader br;
        StringTokenizer stok;

        FastIO(InputStream is, OutputStream os) {
            super(os, false);
            br = new BufferedReader(new InputStreamReader(is));
            stok = new StringTokenizer("");
        }

        String nextToken() {
            while (!stok.hasMoreTokens()) {
                String s;
                try {
                    s = br.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (s == null) {
                    return null;
                }
                stok = new StringTokenizer(s);
            }
            return stok.nextToken();
        }

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

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

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


import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;

public class cp11 {

    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];

        private int curChar;

        private int numChars;

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if (numChars == -1)
                throw new RuntimeException();
            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new RuntimeException();
                }
                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        public String readString() {
            final StringBuilder stringBuilder = new StringBuilder();
            int c = read();
            while (isSpaceChar(c))
                c = read();
            do {
                stringBuilder.append((char)c);
                c = read();
            } while (!isSpaceChar(c));

            return stringBuilder.toString();
        }

        public int readInt() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            int res = 0;
            do {
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }

        public long readLong() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            long res = 0;
            do {
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }

        public boolean isSpaceChar(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }
    }

    public static void main(String[] args)
    {
        InputReader inp=new InputReader(System.in);

        int a=inp.readInt();
        int b=inp.readInt();
        int c=inp.readInt();
        int d=inp.readInt();

        StringBuilder ans=new StringBuilder();

        if(a>b+1 || d>c+1)
        {
            ans.append("NO\n");
        }
        else if(a==b+1)
        {
            if(c==0 && d==0)
            {
                ans.append("YES\n");

                for(int i=0;i<a;i++)
                {
                    ans.append("0 1 ");
                }
                ans.append(0);
            }
            else
            {
                ans.append("NO\n");
            }
        }
        else if(d==c+1)
        {
            if(a==0 && b==0)
            {
                ans.append("YES\n");

                for(int i=0;i<d;i++)
                {
                    ans.append("3 2 ");
                }
                ans.append(3);
            }
            else
            {
                ans.append("NO\n");
            }
        }
        else
        {
            int rem_b=b-a;
            int rem_c=c-d;

            if(rem_b>rem_c+1)
            {
                ans.append("NO\n");
            }
            else if(rem_c>rem_b+1)
            {
                ans.append("NO\n");
            }
            else
            {
                ans.append("YES\n");

                boolean f1=false;
                boolean f2=false;

                if(rem_b==rem_c+1)
                    f1=true;

                if(rem_c==rem_b+1)
                    f2=true;

                if(f1)
                {
                    ans.append("1 ");
                }
                for(int i=0;i<a;i++)
                {
                    ans.append("0 1 ");
                }

                int tt=Math.min(rem_b,rem_c);

                for(int i=0;i<tt;i++)
                {
                    ans.append("2 1 ");
                }

                for(int i=0;i<d;i++)
                {
                    ans.append("2 3 ");
                }

                if(f2)
                    ans.append("2");
            }
        }

        System.out.println(ans.toString());
    }
}


import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;

public class cp11 {

    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];

        private int curChar;

        private int numChars;

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if (numChars == -1)
                throw new RuntimeException();
            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new RuntimeException();
                }
                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        public String readString() {
            final StringBuilder stringBuilder = new StringBuilder();
            int c = read();
            while (isSpaceChar(c))
                c = read();
            do {
                stringBuilder.append((char)c);
                c = read();
            } while (!isSpaceChar(c));

            return stringBuilder.toString();
        }

        public int readInt() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            int res = 0;
            do {
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }

        public long readLong() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            long res = 0;
            do {
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }

        public boolean isSpaceChar(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }
    }

    public static void main(String[] args)
    {
        InputReader inp=new InputReader(System.in);

        int a=inp.readInt();
        int b=inp.readInt();
        int c=inp.readInt();
        int d=inp.readInt();

        StringBuilder ans=new StringBuilder();

        if(a>b+1 || d>c+1)
        {
            ans.append("NO\n");
        }
        else if(a==b+1)
        {
            if(c==0 && d==0)
            {
                ans.append("YES\n");

                for(int i=0;i<a-1;i++)
                {
                    ans.append("0 1 ");
                }
                ans.append(0);
            }
            else
            {
                ans.append("NO\n");
            }
        }
        else if(d==c+1)
        {
            if(a==0 && b==0)
            {
                ans.append("YES\n");

                for(int i=0;i<d-1;i++)
                {
                    ans.append("3 2 ");
                }
                ans.append(3);
            }
            else
            {
                ans.append("NO\n");
            }
        }
        else
        {
            int rem_b=b-a;
            int rem_c=c-d;

            if(rem_b>rem_c+1)
            {
                ans.append("NO\n");
            }
            else if(rem_c>rem_b+1)
            {
                ans.append("NO\n");
            }
            else
            {
                ans.append("YES\n");

                boolean f1=false;
                boolean f2=false;

                if(rem_b==rem_c+1)
                    f1=true;

                if(rem_c==rem_b+1)
                    f2=true;

                if(f1)
                {
                    ans.append("1 ");
                }
                for(int i=0;i<a;i++)
                {
                    ans.append("0 1 ");
                }

                int tt=Math.min(rem_b,rem_c);

                for(int i=0;i<tt;i++)
                {
                    ans.append("2 1 ");
                }

                for(int i=0;i<d;i++)
                {
                    ans.append("2 3 ");
                }

                if(f2)
                    ans.append("2");
            }
        }

        System.out.println(ans.toString());
    }
}


/* Rajkin Hossain */

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

public class D{

    FastInput k = new FastInput(System.in);
    //FastInput k = new FastInput("/home/rajkin/Desktop/input.txt");
    FastOutput z = new FastOutput();

    int zero, one, two, three;

	void startProgram() {

		while(k.hasNext()) {
			zero = k.nextInt();
			one = k.nextInt();
			two = k.nextInt();
			three = k.nextInt();

			if((one-zero == 1 || one-zero == 0) && (two-three == 1 || two-three == 0)) {
				z.println("YES");

				boolean first = false;

				if(one == zero) {
					first = true;
				}

				while(zero > 0 || one > 0) {
					if(first) {
						z.print(0);
						first = false;
						zero--;
					}
					else {
						z.print(1);
						first = true;
						one--;
					}

					z.print(" ");
				}

				while(two > 0 || three > 0) {
					if(first) {
						z.print(2);
						first = false;
						two--;
					}
					else {
						z.print(3);
						first = true;
						three--;
					}

					z.print(" ");
				}

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

    	z.flush();
    	System.exit(0);
	}

    public static void main(String [] args) throws IOException {
        new Thread(null, new Runnable(){
            public void run(){
            	try{
            		new D().startProgram();
            	}
            	catch(Exception e){
            		e.printStackTrace();
            	}
            }
        },"Main",1<<28).start();
    }

    /* MARK: FastInput and FastOutput */

    class FastInput {
        BufferedReader reader;
        StringTokenizer tokenizer;

        FastInput(InputStream stream){
            reader = new BufferedReader(new InputStreamReader(stream));
        }

        FastInput(String path){
            try {
                reader = new BufferedReader(new FileReader(path));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            tokenizer = null;
        }

        String next() {
            return nextToken();
        }

        String nextLine() {
            try {
                return reader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        boolean hasNext(){
            try {
                return reader.ready();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }

        String nextToken() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                String line = null;
                try {
                    line = reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (line == null) {
                    return null;
                }
                tokenizer = new StringTokenizer(line);
            }
            return tokenizer.nextToken();
        }

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

        long nextLong() {
            return Long.valueOf(nextToken());
        }

        double nextDouble() {
            return Double.valueOf(nextToken());
        }
    }

    class FastOutput extends PrintWriter {
		FastOutput() {
			super(new BufferedOutputStream(System.out));
		}

		public void debug(Object...obj) {
		    System.err.println(Arrays.deepToString(obj));
		}
    }
}


/* Rajkin Hossain */

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

public class D{

    FastInput k = new FastInput(System.in);
    //FastInput k = new FastInput("/home/rajkin/Desktop/input.txt");
    FastOutput z = new FastOutput();

    int zero, one, two, three;
    int saveZero, saveOne, saveTwo, saveThree;

    StringBuilder ans;

    void rec(int state) {

    	while(true) {

	    	if(zero == 0 && one == 0 && two == 0 && three == 0) {
	    		break;
	    	}

	    	int prevState = state;

	    	switch (state) {
				case 0:
					zero--;
					ans.append('0');
					if(one > 0) {
						state = 1;
					}
					break;
				case 1:
					one--;
					ans.append('1');
					if(zero > 0) {
						if(one > 0 || one+zero+two+three == 1) {
							state = 0;
						}
					}
					else if(two > 0) {
						state = 2;
					}
					break;
				case 2:
					two--;
					ans.append('2');
					if(one > 0) {
						if(two > 0 || one+zero+two+three == 1) {
							state = 1;
						}
					}
					else if(three > 0) {
						state = 3;
					}
					break;
				case 3:
					ans.append('3');
					three--;
					if(two > 0) {
						state = 2;
					}
					break;
	    	}

	    	if(prevState == state) break;
    	}
    }

    void reset() {
    	zero = saveZero;
    	one = saveOne;
    	two = saveTwo;
    	three = saveThree;
    }

    void save() {
    	saveZero = zero;
    	saveOne = one;
    	saveTwo = two;
    	saveThree = three;
    }

	void startProgram() {

		while(k.hasNext()) {
			zero = k.nextInt();
			one = k.nextInt();
			two = k.nextInt();
			three = k.nextInt();

			save();

			int sum = zero + one + two + three;

			ans = new StringBuilder();

			if(zero > 0) {
				rec(0);
			}

			if(one > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(1);
			}

			if(ans.length() == sum) {
				z.println("YES");
				for(int i = 0; i<sum; i++) {
					z.print(ans.charAt(i)+" ");
				}
				z.println();
			}
			else {
				z.println("NO");
			}
		}

    	z.flush();
    	System.exit(0);
	}

    public static void main(String [] args) throws IOException {
        new Thread(null, new Runnable(){
            public void run(){
            	try{
            		new D().startProgram();
            	}
            	catch(Exception e){
            		e.printStackTrace();
            	}
            }
        },"Main",1<<28).start();
    }

    /* MARK: FastInput and FastOutput */

    class FastInput {
        BufferedReader reader;
        StringTokenizer tokenizer;

        FastInput(InputStream stream){
            reader = new BufferedReader(new InputStreamReader(stream));
        }

        FastInput(String path){
            try {
                reader = new BufferedReader(new FileReader(path));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            tokenizer = null;
        }

        String next() {
            return nextToken();
        }

        String nextLine() {
            try {
                return reader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        boolean hasNext(){
            try {
                return reader.ready();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }

        String nextToken() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                String line = null;
                try {
                    line = reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (line == null) {
                    return null;
                }
                tokenizer = new StringTokenizer(line);
            }
            return tokenizer.nextToken();
        }

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

        long nextLong() {
            return Long.valueOf(nextToken());
        }

        double nextDouble() {
            return Double.valueOf(nextToken());
        }
    }

    class FastOutput extends PrintWriter {
		FastOutput() {
			super(new BufferedOutputStream(System.out));
		}

		public void debug(Object...obj) {
		    System.err.println(Arrays.deepToString(obj));
		}
    }
}


/* Rajkin Hossain */

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

public class D{

    FastInput k = new FastInput(System.in);
    //FastInput k = new FastInput("/home/rajkin/Desktop/input.txt");
    FastOutput z = new FastOutput();

    int zero, one, two, three;
    int saveZero, saveOne, saveTwo, saveThree;

    StringBuilder ans;

    void rec(int state) {
    	if(zero == 0 && one == 0 && two == 0 && three == 0) {
    		return;
    	}

    	switch (state) {
			case 0:
				ans.append('0');
				zero--;
				if(one > 0) {
					rec(1);
				}
				break;
			case 1:
				one--;
				ans.append('1');
				if(zero > 0) {
					if(one > 0 || one+zero+two+three == 1) {
						rec(0);
					}
				}
				else if(two > 0) {
					rec(2);
				}
				break;
			case 2:
				two--;
				ans.append('2');
				if(one > 0) {
					if(two > 0 || one+zero+two+three == 1) {
						rec(1);
					}
				}
				else if(three > 0) {
					rec(3);
				}
				break;
			case 3:
				ans.append('3');
				three--;
				if(two > 0) {
					rec(2);
				}
				break;
    	}
    }

    void reset() {
    	zero = saveZero;
    	one = saveOne;
    	two = saveTwo;
    	three = saveThree;
    }

    void save() {
    	saveZero = zero;
    	saveOne = one;
    	saveTwo = two;
    	saveThree = three;
    }

	void startProgram() {

		while(k.hasNext()) {
			zero = k.nextInt();
			one = k.nextInt();
			two = k.nextInt();
			three = k.nextInt();

			save();

			int sum = zero + one + two + three;

			ans = new StringBuilder();

			if(zero > 0) {
				rec(0);
			}

			if(one > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(1);
			}

			if(two > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(2);
			}

			if(three > 0 && ans.length() != sum){
				ans = new StringBuilder();
				reset();
				rec(3);
			}

			if(ans.length() == sum) {
				z.println("YES");
				for(int i = 0; i<sum; i++) {
					z.print(ans.charAt(i)+" ");
				}
				z.println();
			}
			else {
				z.println("NO");
			}
		}

    	z.flush();
    	System.exit(0);
	}

    public static void main(String [] args) throws IOException {
        new Thread(null, new Runnable(){
            public void run(){
            	try{
            		new D().startProgram();
            	}
            	catch(Exception e){
            		e.printStackTrace();
            	}
            }
        },"Main",1<<28).start();
    }

    /* MARK: FastInput and FastOutput */

    class FastInput {
        BufferedReader reader;
        StringTokenizer tokenizer;

        FastInput(InputStream stream){
            reader = new BufferedReader(new InputStreamReader(stream));
        }

        FastInput(String path){
            try {
                reader = new BufferedReader(new FileReader(path));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            tokenizer = null;
        }

        String next() {
            return nextToken();
        }

        String nextLine() {
            try {
                return reader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        boolean hasNext(){
            try {
                return reader.ready();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }

        String nextToken() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                String line = null;
                try {
                    line = reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (line == null) {
                    return null;
                }
                tokenizer = new StringTokenizer(line);
            }
            return tokenizer.nextToken();
        }

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

        long nextLong() {
            return Long.valueOf(nextToken());
        }

        double nextDouble() {
            return Double.valueOf(nextToken());
        }
    }

    class FastOutput extends PrintWriter {
		FastOutput() {
			super(new BufferedOutputStream(System.out));
		}

		public void debug(Object...obj) {
		    System.err.println(Arrays.deepToString(obj));
		}
    }
}


/* Rajkin Hossain */

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

public class D{

    FastInput k = new FastInput(System.in);
    //FastInput k = new FastInput("/home/rajkin/Desktop/input.txt");
    FastOutput z = new FastOutput();

    int zero, one, two, three;
    int saveZero, saveOne, saveTwo, saveThree;

    StringBuilder ans;

    void rec(int state) {

    	while(true) {

	    	if(zero == 0 && one == 0 && two == 0 && three == 0) {
	    		break;
	    	}

	    	int prevState = state;

	    	switch (state) {
				case 0:
					zero--;
					ans.append('0');
					if(one > 0) {
						state = 1;
					}
					break;
				case 1:
					one--;
					ans.append('1');
					if(zero > 0) {
						if(one > 0 || one+zero+two+three == 1) {
							state = 0;
						}
					}
					else if(two > 0) {
						state = 2;
					}
					break;
				case 2:
					two--;
					ans.append('2');
					if(one > 0) {
						if(two > 0 || one+zero+two+three == 1) {
							state = 1;
						}
					}
					else if(three > 0) {
						state = 3;
					}
					break;
				case 3:
					ans.append('3');
					three--;
					if(two > 0) {
						state = 2;
					}
					break;
	    	}

	    	if(prevState == state) break;
    	}
    }

    void reset() {
    	zero = saveZero;
    	one = saveOne;
    	two = saveTwo;
    	three = saveThree;
    }

    void save() {
    	saveZero = zero;
    	saveOne = one;
    	saveTwo = two;
    	saveThree = three;
    }

	void startProgram() {

		while(k.hasNext()) {
			zero = k.nextInt();
			one = k.nextInt();
			two = k.nextInt();
			three = k.nextInt();

			save();

			int sum = zero + one + two + three;

			ans = new StringBuilder();

			if(zero > 0) {
				rec(0);
			}

			if(one > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(1);
			}

			if(two > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(2);
			}

			if(three > 0 && ans.length() != sum){
				ans = new StringBuilder();
				reset();
				rec(3);
			}

			if(ans.length() == sum) {
				z.println("YES");
				for(int i = 0; i<sum; i++) {
					z.print(ans.charAt(i)+" ");
				}
				z.println();
			}
			else {
				z.println("NO");
			}
		}

    	z.flush();
    	System.exit(0);
	}

    public static void main(String [] args) throws IOException {
        new Thread(null, new Runnable(){
            public void run(){
            	try{
            		new D().startProgram();
            	}
            	catch(Exception e){
            		e.printStackTrace();
            	}
            }
        },"Main",1<<28).start();
    }

    /* MARK: FastInput and FastOutput */

    class FastInput {
        BufferedReader reader;
        StringTokenizer tokenizer;

        FastInput(InputStream stream){
            reader = new BufferedReader(new InputStreamReader(stream));
        }

        FastInput(String path){
            try {
                reader = new BufferedReader(new FileReader(path));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            tokenizer = null;
        }

        String next() {
            return nextToken();
        }

        String nextLine() {
            try {
                return reader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        boolean hasNext(){
            try {
                return reader.ready();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }

        String nextToken() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                String line = null;
                try {
                    line = reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (line == null) {
                    return null;
                }
                tokenizer = new StringTokenizer(line);
            }
            return tokenizer.nextToken();
        }

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

        long nextLong() {
            return Long.valueOf(nextToken());
        }

        double nextDouble() {
            return Double.valueOf(nextToken());
        }
    }

    class FastOutput extends PrintWriter {
		FastOutput() {
			super(new BufferedOutputStream(System.out));
		}

		public void debug(Object...obj) {
		    System.err.println(Arrays.deepToString(obj));
		}
    }
}


/* Rajkin Hossain */

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

public class D{

    FastInput k = new FastInput(System.in);
    //FastInput k = new FastInput("/home/rajkin/Desktop/input.txt");
    FastOutput z = new FastOutput();

    int zero, one, two, three;
    int saveZero, saveOne, saveTwo, saveThree;

    StringBuilder ans;

    void rec(int state) {
    	if(zero == 0 && one == 0 && two == 0 && three == 0) {
    		return;
    	}

    	switch (state) {
			case 0:
				ans.append('0');
				zero--;
				rec(1);
				break;
			case 1:
				one--;
				ans.append('1');
				if(zero > 0 && one > 0) {
					rec(0);
				}
				else if(two > 0) {
					rec(2);
				}
				break;
			case 2:
				two--;
				ans.append('2');
				if(one > 0 && two > 0) {
					rec(1);
				}
				else if(three > 0) {
					rec(3);
				}
				break;
			case 3:
				ans.append('3');
				three--;
				if(two > 0) {
					rec(2);
				}
				break;
    	}
    }

    void reset() {
    	zero = saveZero;
    	one = saveOne;
    	two = saveTwo;
    	three = saveThree;
    }

    void save() {
    	saveZero = zero;
    	saveOne = one;
    	saveTwo = two;
    	saveThree = three;
    }

	void startProgram() {

		while(k.hasNext()) {
			zero = k.nextInt();
			one = k.nextInt();
			two = k.nextInt();
			three = k.nextInt();

			save();

			int sum = zero + one + two + three;

			ans = new StringBuilder();

			if(zero > 0) {
				rec(0);
			}

			if(one > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(1);
			}

			if(two > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(2);
			}

			if(three > 0 && ans.length() != sum){
				ans = new StringBuilder();
				reset();
				rec(3);
			}

			if(ans.length() == sum) {
				z.println("YES");
				for(int i = 0; i<sum; i++) {
					z.print(ans.charAt(i)+" ");
				}
				z.println();
			}
			else {
				z.println("NO");
			}
		}

    	z.flush();
    	System.exit(0);
	}

    public static void main(String [] args) throws IOException {
        new Thread(null, new Runnable(){
            public void run(){
            	try{
            		new D().startProgram();
            	}
            	catch(Exception e){
            		e.printStackTrace();
            	}
            }
        },"Main",1<<28).start();
    }

    /* MARK: FastInput and FastOutput */

    class FastInput {
        BufferedReader reader;
        StringTokenizer tokenizer;

        FastInput(InputStream stream){
            reader = new BufferedReader(new InputStreamReader(stream));
        }

        FastInput(String path){
            try {
                reader = new BufferedReader(new FileReader(path));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            tokenizer = null;
        }

        String next() {
            return nextToken();
        }

        String nextLine() {
            try {
                return reader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        boolean hasNext(){
            try {
                return reader.ready();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }

        String nextToken() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                String line = null;
                try {
                    line = reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (line == null) {
                    return null;
                }
                tokenizer = new StringTokenizer(line);
            }
            return tokenizer.nextToken();
        }

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

        long nextLong() {
            return Long.valueOf(nextToken());
        }

        double nextDouble() {
            return Double.valueOf(nextToken());
        }
    }

    class FastOutput extends PrintWriter {
		FastOutput() {
			super(new BufferedOutputStream(System.out));
		}

		public void debug(Object...obj) {
		    System.err.println(Arrays.deepToString(obj));
		}
    }
}


/* Rajkin Hossain */

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

public class D{

    FastInput k = new FastInput(System.in);
    //FastInput k = new FastInput("/home/rajkin/Desktop/input.txt");
    FastOutput z = new FastOutput();

    int zero, one, two, three;
    int saveZero, saveOne, saveTwo, saveThree;

    StringBuilder ans;

    void rec(int state) {
    	if(zero == 0 && one == 0 && two == 0 && three == 0) {
    		return;
    	}

    	switch (state) {
			case 0:
				ans.append('0');
				zero--;
				if(one > 0) {
					rec(1);
				}
				break;
			case 1:
				one--;
				ans.append('1');
				if(zero > 0 && one > 0) {
					rec(0);
				}
				else if(two > 0) {
					rec(2);
				}
				break;
			case 2:
				two--;
				ans.append('2');
				if(one > 0 && two > 0) {
					rec(1);
				}
				else if(three > 0) {
					rec(3);
				}
				break;
			case 3:
				ans.append('3');
				three--;
				if(two > 0) {
					rec(2);
				}
				break;
    	}
    }

    void reset() {
    	zero = saveZero;
    	one = saveOne;
    	two = saveTwo;
    	three = saveThree;
    }

    void save() {
    	saveZero = zero;
    	saveOne = one;
    	saveTwo = two;
    	saveThree = three;
    }

	void startProgram() {

		while(k.hasNext()) {
			zero = k.nextInt();
			one = k.nextInt();
			two = k.nextInt();
			three = k.nextInt();

			save();

			int sum = zero + one + two + three;

			ans = new StringBuilder();

			if(zero > 0) {
				rec(0);
			}

			if(one > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(1);
			}

			if(two > 0 && ans.length() != sum) {
				ans = new StringBuilder();
				reset();
				rec(2);
			}

			if(three > 0 && ans.length() != sum){
				ans = new StringBuilder();
				reset();
				rec(3);
			}

			if(ans.length() == sum) {
				z.println("YES");
				for(int i = 0; i<sum; i++) {
					z.print(ans.charAt(i)+" ");
				}
				z.println();
			}
			else {
				z.println("NO");
			}
		}

    	z.flush();
    	System.exit(0);
	}

    public static void main(String [] args) throws IOException {
        new Thread(null, new Runnable(){
            public void run(){
            	try{
            		new D().startProgram();
            	}
            	catch(Exception e){
            		e.printStackTrace();
            	}
            }
        },"Main",1<<28).start();
    }

    /* MARK: FastInput and FastOutput */

    class FastInput {
        BufferedReader reader;
        StringTokenizer tokenizer;

        FastInput(InputStream stream){
            reader = new BufferedReader(new InputStreamReader(stream));
        }

        FastInput(String path){
            try {
                reader = new BufferedReader(new FileReader(path));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            tokenizer = null;
        }

        String next() {
            return nextToken();
        }

        String nextLine() {
            try {
                return reader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        boolean hasNext(){
            try {
                return reader.ready();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }

        String nextToken() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                String line = null;
                try {
                    line = reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (line == null) {
                    return null;
                }
                tokenizer = new StringTokenizer(line);
            }
            return tokenizer.nextToken();
        }

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

        long nextLong() {
            return Long.valueOf(nextToken());
        }

        double nextDouble() {
            return Double.valueOf(nextToken());
        }
    }

    class FastOutput extends PrintWriter {
		FastOutput() {
			super(new BufferedOutputStream(System.out));
		}

		public void debug(Object...obj) {
		    System.err.println(Arrays.deepToString(obj));
		}
    }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

public class compete604d {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] vals = new int[4];
		for(int j = 0; j < 4; j++) {
			vals[j] = Integer.parseInt(st.nextToken());
		}
		List<Integer> res = getRes(vals);
		if(res == null) {
			System.out.println("NO");
		} else {
			System.out.println("YES");
			for(int v : res) {
				System.out.print(v + " ");
			}
		}

	}

	public static List<Integer> getRes(int[] vals){
		LinkedList<Integer> res1 = new LinkedList<Integer>();
		while(vals[3] > 0 && vals[2] > 0) {
			res1.addLast(2);
			res1.addLast(3);
			vals[2]--;
			vals[3]--;
		}

		LinkedList<Integer> res2 = new LinkedList<Integer>();
		while(vals[0] > 0 && vals[1] > 0) {
			res2.addFirst(1);
			res2.addFirst(0);
			vals[1]--;
			vals[0]--;
		}

		while(vals[1] > 0 && vals[2] > 0) {
			res2.addLast(2);
			res2.addLast(1);
			vals[2]--;
			vals[1]--;
		}
		if(vals[0] > 0 && res1.isEmpty()) {
			res2.addLast(0);
			vals[0]--;
		}
		if(vals[3] > 0 && res2.isEmpty()) {
			res1.addFirst(3);
			vals[3]--;
		}

		res2.addAll(res1);
		if(vals[2] > 0 && (res2.isEmpty() || res2.getFirst() != 0)) {
			res2.addLast(2);
			vals[2]--;
		}
		if(vals[1] > 0 && (res2.isEmpty() || res2.getFirst() == 0)) {
			res2.addFirst(1);
			vals[1]--;
		}
		if(vals[0] + vals[1] + vals[2] + vals[3] > 0) {
			return null;
		}
		return res2;
	}

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

public class compete604d {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] vals = new int[4];
		for(int j = 0; j < 4; j++) {
			vals[j] = Integer.parseInt(st.nextToken());
		}
		List<Integer> res = getRes(vals);
		if(res == null) {
			System.out.println("NO");
		} else {
			System.out.println("YES");
			for(int v : res) {
				System.out.print(v + " ");
			}
		}

	}

	public static List<Integer> getRes(int[] vals){
		LinkedList<Integer> res1 = new LinkedList<Integer>();
		while(vals[3] > 0 && vals[2] > 0) {
			res1.addLast(2);
			res1.addLast(3);
			vals[2]--;
			vals[3]--;
		}

		LinkedList<Integer> res2 = new LinkedList<Integer>();
		while(vals[0] > 0 && vals[1] > 0) {
			res2.addFirst(1);
			res2.addFirst(0);
			vals[1]--;
			vals[0]--;
		}

		while(vals[1] > 0 && vals[2] > 0) {
			res2.addLast(2);
			res2.addLast(1);
			vals[2]--;
			vals[1]--;
		}
		if(vals[0] > 0 && res1.isEmpty()) {
			res2.addLast(0);
			vals[0]--;
		}
		if(vals[3] > 0 && res2.isEmpty()) {
			res1.addFirst(3);
			vals[3]--;
		}

		res2.addAll(res1);
		if(vals[2] > 0) {
			res2.addLast(2);
			vals[2]--;
		}
		if(vals[1] > 0) {
			res2.addFirst(1);
			vals[1]--;
		}
		if(vals[0] + vals[1] + vals[2] + vals[3] > 0) {
			return null;
		}
		return res2;
	}

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

public class compete604d {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] vals = new int[4];
		for(int j = 0; j < 4; j++) {
			vals[j] = Integer.parseInt(st.nextToken());
		}
		List<Integer> res = getRes(vals);
		if(res == null) {
			System.out.println("NO");
		} else {
			System.out.println("YES");
			for(int v : res) {
				System.out.print(v + " ");
			}
		}

	}

	public static List<Integer> getRes(int[] vals){
		LinkedList<Integer> res1 = new LinkedList<Integer>();
		while(vals[3] > 0 && vals[2] > 0) {
			res1.addLast(2);
			res1.addLast(3);
			vals[2]--;
			vals[3]--;
		}

		LinkedList<Integer> res2 = new LinkedList<Integer>();
		while(vals[0] > 0 && vals[1] > 0) {
			res2.addFirst(1);
			res2.addFirst(0);
			vals[1]--;
			vals[0]--;
		}

		while(vals[1] > 0 && vals[2] > 0) {
			res2.addLast(2);
			res2.addLast(1);
			vals[2]--;
			vals[1]--;
		}
		if(vals[0] > 0 && res1.isEmpty()) {
			res2.addLast(0);
			vals[0]--;
		}
		if(vals[3] > 0 && res2.isEmpty()) {
			res1.addFirst(3);
			vals[3]--;
		}

		res2.addAll(res1);
		if(vals[2] > 0 && (res2.isEmpty() || res2.getLast() != 0)) {
			res2.addLast(2);
			vals[2]--;
		}
		if(vals[1] > 0 && (res2.isEmpty() || res2.getFirst() == 0)) {
			res2.addFirst(1);
			vals[1]--;
		}
		if(vals[0] + vals[1] + vals[2] + vals[3] > 0) {
			return null;
		}
		return res2;
	}

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

public class compete604d {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] vals = new int[4];
		for(int j = 0; j < 4; j++) {
			vals[j] = Integer.parseInt(st.nextToken());
		}
		List<Integer> res = getRes(vals);
		if(res == null) {
			System.out.println("NO");
		} else {
			System.out.println("YES");
			for(int v : res) {
				System.out.print(v + " ");
			}
		}

	}

	public static List<Integer> getRes(int[] vals){
		LinkedList<Integer> res1 = new LinkedList<Integer>();
		while(vals[3] > 0 && vals[2] > 0) {
			res1.addLast(2);
			res1.addLast(3);
			vals[2]--;
			vals[3]--;
		}

		LinkedList<Integer> res2 = new LinkedList<Integer>();
		while(vals[0] > 0 && vals[1] > 0) {
			res2.addFirst(1);
			res2.addFirst(0);
			vals[1]--;
			vals[0]--;
		}

		while(vals[1] > 0 && vals[2] > 0) {
			res2.addLast(2);
			res2.addLast(1);
			vals[2]--;
			vals[1]--;
		}
		if(vals[0] > 0 && res1.isEmpty()) {
			res2.addLast(0);
			vals[0]--;
		}
		if(vals[3] > 0 && res2.isEmpty()) {
			res1.addFirst(3);
			vals[3]--;
		}

		res2.addAll(res1);
		if(vals[2] > 0 && (res2.isEmpty() || res2.getLast() != 0)) {
			res2.addLast(2);
			vals[2]--;
		}
		if(vals[1] > 0 && (res2.isEmpty() || res2.getFirst() != 3)) {
			res2.addFirst(1);
			vals[1]--;
		}
		if(vals[0] + vals[1] + vals[2] + vals[3] > 0) {
			return null;
		}
		return res2;
	}

}


//package learning;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class NitsLocal {
    static ArrayList<String> s1;
    static boolean[] prime;
    static int n = (int)1e7;

     static void sieve() {
Arrays.fill(prime	, true);
prime[0] = prime[1] = false;
for(int i = 2 ; i * i <= n ; ++i) {
if(prime[i]) {
for(int k = i * i; k<= n ; k+=i) {
prime[k] = false;
}
}
}

}
    public static void main(String[] args) {
        InputReader sc = new InputReader(System.in);

           prime  = new boolean[n + 1];
           //sieve();
                prime[1] = false;
                /*
              int n = sc.ni();
              int []a = sc.nia(n);
              int mod = 1000000007;
              long ans = 0;
              int f = 0;
              int q = sc.ni();
              while(q-- > 0)
              {
                  int num = sc.ni();
                  ans = 0;
                  if(num == 0)
                  {
                      a[sc.ni()-1] = sc.ni();
                  }
                 else
                  {
                      int l = sc.ni();
                      int r = sc.ni();
                    for(int i=l-1;i<r;i++)
                   {

                   for(int j=i+1;j<r;j++)
                   {
                      f = 0;

                      int x = a[i];
                      int y = a[j];
                      while(x > 0 && y > 0)
                      {
                          int y1 = x%10;
                          int y2 = y%10;
                          if(y1 > 0 && y2 > 0)
                          {
                              f = 1;
                          }
                          x /= 10;
                          y /= 10;
                      }

                     if(f==0)
                     {
                         ans = (ans + ((((long)a[i]%mod) * ((long)a[j]%mod)))%mod)%mod;
                     }
                  }
              }

              w.println(ans);
                  }
              }

            */
                /*
               int t  = sc.ni();
               while(t-- > 0)
               {
                   int n = sc.ni();
                   Student []st = new Student[n];
                   for(int i=0;i<n;i++)
                   {
                       st[i] = new Student(sc.ni(),sc.ni());
                   }
                   Arrays.sort(st,(p,q)->p.id-q.id);
                   if(n==1)
                       w.println("0");
                   else
                   {
                    int prev = 0;
                    int adv = 0;
                    int max = -1;
                    int min = 1000000000;
                    for(int i=0;i<n;i++)
                    {
                        min = Math.min(st[i].y,min);
                        max = Math.max(st[i].y,max);
                    }
                        if(st[0].y > st[1].y)
                        {
                            prev = st[0].id;
                        }
                        else
                            prev= st[0].y;
                         if(st[n-1].id < st[n-2].y)
                        {
                            adv = st[n-1].id;
                        }
                        else
                            prev= st[n-1].y;
                         w.println(adv-prev);

                   }
               }
             */int []val = new int[4];
             for(int i=0;i<4;i++)
             {
                 val[i] = sc.ni();
             }

             List<Integer> res = getRes(val);
             if(res==null)
                 w.println("NO");
             else
             {
                 w.println("YES");
                 for(int i=0;i<res.size();i++)
                 {
                     w.print(res.get(i) + " ");
                 }
             }

       w.close();

    }
    public static List<Integer> getRes(int []val)
    {
        LinkedList<Integer> res1 = new LinkedList<>();
        while(val[3] > 0 && val[2] > 0)
        {
            res1.addLast(2);
           res1.addLast(3);
           val[2]--;
           val[3]--;

        }
        LinkedList<Integer> res2 = new LinkedList<>();
        while(val[0] > 0 && val[1] > 0)
        {
            res2.addFirst(1);
           res2.addFirst(0);
           val[1]--;
           val[0]--;

        }
        while(val[1] > 0 && val[2] > 0)
        {
            res2.addLast(2);
           res2.addLast(1);
           val[2]--;
           val[1]--;

        }
        if(val[0] > 0 && res1.isEmpty())
        {
            res2.addLast(0);
            val[0]--;
        }
        if(val[3] > 0 && res2.isEmpty())
        {
            res1.addFirst(3);
            val[3]--;
        }
        res2.addAll(res1);
        if(val[2] > 0 && (res2.isEmpty() || res2.getLast() != 0))
        {
            res2.add(2);
            val[2]--;
        }
        if(val[1] > 0 && (res2.isEmpty() || res2.getFirst() != 3))
        {
            res2.add(1);
            val[1]--;
        }
        if(val[0] + val[1] + val[2] + val[3] > 0)
            return null;

            return res2;

    }
    public static int upperBound(int []arr,int n,int num)
    {
        int l = 0;
        int r = n;
        while(l < r)
        {
            int mid = (l+r)/2;
            if(num >= arr[mid])
            {
                l = mid +1;
            }
            else
                r = mid;
        }
        return l;
    }
    public static int countSetBits(int number){
        int count = 0;
        while(number>0){
            ++count;
            number &= number-1;
        }
        return count;
    }

     static  class CustomerSortingComparator
                                implements Comparator<Temp> {

    @Override
    public int compare(Temp cust1, Temp cust2) {

        // all comparison
        int compareName = 0;
        if(cust1.a < cust2.a)
            return 1;

        else if(cust1.a > cust2.a)
        return -1;
        else
        {
            if(cust1.b < cust2.b)
                return 1;
            else
                return -1;

        }

        }

    }

    public static long pow(long i, long j) {
		long res=1L;
		for(int a=0;a<j;a++) res*=i;
		return res;
	}
    public static long powmod(long i, long j,long MOD) {
		if(j==0) return 1L;
		if(j%2==0) {
			long temp=powmod(i,j/2,MOD);
			return (temp*temp)%MOD;
		}
		return (i*powmod(i,j-1,MOD))%MOD;
	}
    static HashSet<Integer> fac;
    public static void primeFactors(int n)
    {
        // Print the number of 2s that divide n
        int t = 0;
        while (n%2==0)
        {
            fac.add(2);
            n /= 2;
        }

        // n must be odd at this point.  So we can
        // skip one element (Note i = i +2)
        for (int i = 3; i*i <= n; i+= 2)
        {
            // While i divides n, print i and divide n
            while (n%i == 0)
            {
                fac.add(i);
                n /= i;
            }
        }

        // This condition is to handle the case whien
        // n is a prime number greater than 2
        if (n > 2)
            fac.add(n);
    }
     static long modexp(long x,long n,long M)
{
    long power = n;
    long result=1;
    x = x%M;
    while(power>0)
    {
        if(power % 2 ==1)
            result=(result * x)%M;
        x=(x*x)%M;
        power = power/2;
    }
    return result;
}
    static long gcd(long a,long b)
    {
        if(a==0)
            return b;
        else
            return gcd(b%a,a);
    }
    static class Temp{
        int a;
        int b;
        int c;
        int d;

        Temp(int a,int b,int c,int d)
        {
            this.a = a;
            this.b = b;
            this.c  =c;
            this.d = d;
            //this.d = d;
        }
    }
    static class Query{
        int p;
        int index;
        int value;
        public Query(int p,int index,int value)
        {
            this.p = p;
            this.index = index;
            this.value = value;

        }
    }
    static int nextPowerOf2(int n)
    {
        int count = 0;

        // First n in the below
        // condition is for the
        // case where n is 0
        if (n > 0 && (n & (n - 1)) == 0)
            return n;

        while(n != 0)
        {
            n >>= 1;
            count += 1;
        }

        return 1 << count;
    }

   static long sum1(int t1,int t2,int x,int []t)
   {
       int mid = (t2-t1+1)/2;
  if(t1==t2)
      return 0;

   else
   return sum1(t1,mid-1,x,t) + sum1(mid,t2,x,t);

   }

    static String replace(String s,int a,int n)
    {
        char []c = s.toCharArray();
        for(int i=1;i<n;i+=2)
        {
            int num = (int) (c[i] - 48);
            num += a;
            num%=10;
            c[i] = (char) (num+48);
        }
        return new String(c);
    }
    static String move(String s,int h,int n)
    {
        h%=n;
        char []c = s.toCharArray();
        char []temp = new char[n];
        for(int i=0;i<n;i++)
        {
            temp[(i+h)%n] = c[i];
        }
        return new String(temp);
    }

     public static int ip(String s){
return Integer.parseInt(s);
}
     static class multipliers implements Comparator<Long>{

  public int compare(Long a,Long b) {
   if(a<b)
    return 1;
   else if(b<a)
    return -1;
   else
    return 0;
  }
 }
     static class multipliers1 implements Comparator<Student>{

  public int compare(Student a,Student b) {
   if(a.y<b.y)
    return 1;
   else if(b.y<a.y)
    return -1;
   else
   {
       if(a.id < b.id)
           return 1;
       else if(b.id<a.id)
           return -1;
       else
           return 0;

    //return 0;
   }
  }
 }
    // Java program to generate power set in
// lexicographic order.

      static class InputReader {

private final InputStream stream;
private final byte[] buf = new byte[8192];
private int curChar, snumChars;

public InputReader(InputStream st) {
this.stream = st;
}

public int read() {
if (snumChars == -1)
throw new InputMismatchException();
if (curChar >= snumChars) {
curChar = 0;
try {
snumChars = stream.read(buf);
} catch (IOException e) {
throw new InputMismatchException();
}
if (snumChars <= 0)
return -1;
}
return buf[curChar++];
}

public int ni() {
int c = read();
while (isSpaceChar(c)) {
c = read();
}
int sgn = 1;
if (c == '-') {
sgn = -1;
c = read();
}
int res = 0;
do {
res *= 10;
res += c - '0';
c = read();
} while (!isSpaceChar(c));
return res * sgn;
}

public long nl() {
int c = read();
while (isSpaceChar(c)) {
c = read();
}
int sgn = 1;
if (c == '-') {
sgn = -1;
c = read();
}
long res = 0;
do {
res *= 10;
res += c - '0';
c = read();
} while (!isSpaceChar(c));
return res * sgn;
}

public int[] nia(int n) {
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = ni();
}
return a;
}

public String rs() {
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 String nextLine() {
int c = read();
while (isSpaceChar(c))
c = read();
StringBuilder res = new StringBuilder();
do {
res.appendCodePoint(c);
c = read();
} while (!isEndOfLine(c));
return res.toString();
}

public boolean isSpaceChar(int c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}

private boolean isEndOfLine(int c) {
return c == '\n' || c == '\r' || c == -1;
}

}

static PrintWriter w = new PrintWriter(System.out);
                  static class Student
    {
        int id;
        //int x;

        int y;
        //long z;

        Student(int id,int y)
        {
            this.id = id;
            //this.x = x;
            //this.s = s;
            this.y = y;
           // this.z = z;

        }

    }
}


//package learning;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class NitsLocal {
    static ArrayList<String> s1;
    static boolean[] prime;
    static int n = (int)1e7;

     static void sieve() {
Arrays.fill(prime	, true);
prime[0] = prime[1] = false;
for(int i = 2 ; i * i <= n ; ++i) {
if(prime[i]) {
for(int k = i * i; k<= n ; k+=i) {
prime[k] = false;
}
}
}

}
    public static void main(String[] args) {
        InputReader sc = new InputReader(System.in);

           prime  = new boolean[n + 1];
           //sieve();
                prime[1] = false;
                /*
              int n = sc.ni();
              int []a = sc.nia(n);
              int mod = 1000000007;
              long ans = 0;
              int f = 0;
              int q = sc.ni();
              while(q-- > 0)
              {
                  int num = sc.ni();
                  ans = 0;
                  if(num == 0)
                  {
                      a[sc.ni()-1] = sc.ni();
                  }
                 else
                  {
                      int l = sc.ni();
                      int r = sc.ni();
                    for(int i=l-1;i<r;i++)
                   {

                   for(int j=i+1;j<r;j++)
                   {
                      f = 0;

                      int x = a[i];
                      int y = a[j];
                      while(x > 0 && y > 0)
                      {
                          int y1 = x%10;
                          int y2 = y%10;
                          if(y1 > 0 && y2 > 0)
                          {
                              f = 1;
                          }
                          x /= 10;
                          y /= 10;
                      }

                     if(f==0)
                     {
                         ans = (ans + ((((long)a[i]%mod) * ((long)a[j]%mod)))%mod)%mod;
                     }
                  }
              }

              w.println(ans);
                  }
              }

            */
                /*
               int t  = sc.ni();
               while(t-- > 0)
               {
                   int n = sc.ni();
                   Student []st = new Student[n];
                   for(int i=0;i<n;i++)
                   {
                       st[i] = new Student(sc.ni(),sc.ni());
                   }
                   Arrays.sort(st,(p,q)->p.id-q.id);
                   if(n==1)
                       w.println("0");
                   else
                   {
                    int prev = 0;
                    int adv = 0;
                    int max = -1;
                    int min = 1000000000;
                    for(int i=0;i<n;i++)
                    {
                        min = Math.min(st[i].y,min);
                        max = Math.max(st[i].y,max);
                    }
                        if(st[0].y > st[1].y)
                        {
                            prev = st[0].id;
                        }
                        else
                            prev= st[0].y;
                         if(st[n-1].id < st[n-2].y)
                        {
                            adv = st[n-1].id;
                        }
                        else
                            prev= st[n-1].y;
                         w.println(adv-prev);

                   }
               }
             */

                       int t = 1;
                       while(t-- > 0)
                       {
                        int a = sc.ni();
                        int b = sc.ni();
                        int c = sc.ni();
                        int d = sc.ni();
                        int f = 0;
                        int g = 0;
                        if(a <= b)
                        {
                            int t1 = b-a;
                            if(t1 <= c)
                            {
                                if(t1 == c && d==0)
                                {
                                    if(c==0)
                                    {
                                        w.println("YES");
                                        int []res = new int[a+b+c+d+5];
                                         for(int i=0;i<a;i+=2)
                                   {
                                       res[i] = 0;
                                       res[i+1] = 1;
                                   }
                                         for(int i=0;i<a+b+c+d;i++)
                                   {
                                       w.print(res[i] + " ");
                                   }
                                    }
                                    else
                                    {
                                        w.println("YES");
                                        int []res = new int[a+b+c+d+5];
                                         for(int i=0;i<2*a;i+=2)
                                   {
                                       res[i] = 0;
                                       res[i+1] = 1;
                                   }
                                         for(int i=2*a;i<2*a +2*t1;i+=2)
                                   {
                                       res[i] = 2;
                                       res[i+1] = 1;
                                   }
                                         for(int i=0;i<a+b+c+d;i++)
                                   {
                                       w.print(res[i] + " ");
                                   }
                                    }
                                }
                                else
                                {
                                    if(t1==c && d!=0)
                                    {
                                        f = 1;
                                        t1--;
                                    }
                                int t2 = c-t1;
                                if(t2==d || t2 ==d+1)
                                {

                                    w.println("YES");

                                   int []res = new int[a+b+c+d+5];
                                   for(int i=0;i<2*a;i+=2)
                                   {
                                       res[i] = 0;
                                       res[i+1] = 1;
                                   }
                                   for(int i=2*a;i<2*a +2*t1;i+=2)
                                   {
                                       res[i] = 2;
                                       res[i+1] = 1;
                                   }
                                   for(int i=2*a + 2*t1;i<2*a + 2*t1+2*d;i+=2)
                                   {
                                       res[i] = 2;
                                       res[i+1] = 3;
                                   }
                                   if(f==1)
                                       w.print("1 ");
                                   for(int i=0;i<a+b+c+d;i++)
                                   {
                                       if(f==1 && t2 == d+1)
                                       {
                                           if(i==a+b+c +d-2)
                                               break;
                                       }
                                       else
                                       {
                                           if(f==1 || t2 == d+1)
                                           {
                                               if(i==a+b+c +d-1)
                                               break;
                                           }
                                       }
                                       w.print(res[i] + " ");
                                   }
                                   if(t2 == d+1)
                                       w.print("2");
                                }
                                else
                                    w.println("NO");
                                }
                            }

                            else
                            {

                                w.println("NO");
                            }
                        }
                        else
                            w.println("NO");

                       }

       w.close();

    }
    public static int upperBound(int []arr,int n,int num)
    {
        int l = 0;
        int r = n;
        while(l < r)
        {
            int mid = (l+r)/2;
            if(num >= arr[mid])
            {
                l = mid +1;
            }
            else
                r = mid;
        }
        return l;
    }
    public static int countSetBits(int number){
        int count = 0;
        while(number>0){
            ++count;
            number &= number-1;
        }
        return count;
    }

     static  class CustomerSortingComparator
                                implements Comparator<Temp> {

    @Override
    public int compare(Temp cust1, Temp cust2) {

        // all comparison
        int compareName = 0;
        if(cust1.a < cust2.a)
            return 1;

        else if(cust1.a > cust2.a)
        return -1;
        else
        {
            if(cust1.b < cust2.b)
                return 1;
            else
                return -1;

        }

        }

    }

    public static long pow(long i, long j) {
		long res=1L;
		for(int a=0;a<j;a++) res*=i;
		return res;
	}
    public static long powmod(long i, long j,long MOD) {
		if(j==0) return 1L;
		if(j%2==0) {
			long temp=powmod(i,j/2,MOD);
			return (temp*temp)%MOD;
		}
		return (i*powmod(i,j-1,MOD))%MOD;
	}
    static HashSet<Integer> fac;
    public static void primeFactors(int n)
    {
        // Print the number of 2s that divide n
        int t = 0;
        while (n%2==0)
        {
            fac.add(2);
            n /= 2;
        }

        // n must be odd at this point.  So we can
        // skip one element (Note i = i +2)
        for (int i = 3; i*i <= n; i+= 2)
        {
            // While i divides n, print i and divide n
            while (n%i == 0)
            {
                fac.add(i);
                n /= i;
            }
        }

        // This condition is to handle the case whien
        // n is a prime number greater than 2
        if (n > 2)
            fac.add(n);
    }
     static long modexp(long x,long n,long M)
{
    long power = n;
    long result=1;
    x = x%M;
    while(power>0)
    {
        if(power % 2 ==1)
            result=(result * x)%M;
        x=(x*x)%M;
        power = power/2;
    }
    return result;
}
    static long gcd(long a,long b)
    {
        if(a==0)
            return b;
        else
            return gcd(b%a,a);
    }
    static class Temp{
        int a;
        int b;
        int c;
        int d;

        Temp(int a,int b,int c,int d)
        {
            this.a = a;
            this.b = b;
            this.c  =c;
            this.d = d;
            //this.d = d;
        }
    }
    static class Query{
        int p;
        int index;
        int value;
        public Query(int p,int index,int value)
        {
            this.p = p;
            this.index = index;
            this.value = value;

        }
    }
    static int nextPowerOf2(int n)
    {
        int count = 0;

        // First n in the below
        // condition is for the
        // case where n is 0
        if (n > 0 && (n & (n - 1)) == 0)
            return n;

        while(n != 0)
        {
            n >>= 1;
            count += 1;
        }

        return 1 << count;
    }

   static long sum1(int t1,int t2,int x,int []t)
   {
       int mid = (t2-t1+1)/2;
  if(t1==t2)
      return 0;

   else
   return sum1(t1,mid-1,x,t) + sum1(mid,t2,x,t);

   }

    static String replace(String s,int a,int n)
    {
        char []c = s.toCharArray();
        for(int i=1;i<n;i+=2)
        {
            int num = (int) (c[i] - 48);
            num += a;
            num%=10;
            c[i] = (char) (num+48);
        }
        return new String(c);
    }
    static String move(String s,int h,int n)
    {
        h%=n;
        char []c = s.toCharArray();
        char []temp = new char[n];
        for(int i=0;i<n;i++)
        {
            temp[(i+h)%n] = c[i];
        }
        return new String(temp);
    }

     public static int ip(String s){
return Integer.parseInt(s);
}
     static class multipliers implements Comparator<Long>{

  public int compare(Long a,Long b) {
   if(a<b)
    return 1;
   else if(b<a)
    return -1;
   else
    return 0;
  }
 }
     static class multipliers1 implements Comparator<Student>{

  public int compare(Student a,Student b) {
   if(a.y<b.y)
    return 1;
   else if(b.y<a.y)
    return -1;
   else
   {
       if(a.id < b.id)
           return 1;
       else if(b.id<a.id)
           return -1;
       else
           return 0;

    //return 0;
   }
  }
 }
    // Java program to generate power set in
// lexicographic order.

      static class InputReader {

private final InputStream stream;
private final byte[] buf = new byte[8192];
private int curChar, snumChars;

public InputReader(InputStream st) {
this.stream = st;
}

public int read() {
if (snumChars == -1)
throw new InputMismatchException();
if (curChar >= snumChars) {
curChar = 0;
try {
snumChars = stream.read(buf);
} catch (IOException e) {
throw new InputMismatchException();
}
if (snumChars <= 0)
return -1;
}
return buf[curChar++];
}

public int ni() {
int c = read();
while (isSpaceChar(c)) {
c = read();
}
int sgn = 1;
if (c == '-') {
sgn = -1;
c = read();
}
int res = 0;
do {
res *= 10;
res += c - '0';
c = read();
} while (!isSpaceChar(c));
return res * sgn;
}

public long nl() {
int c = read();
while (isSpaceChar(c)) {
c = read();
}
int sgn = 1;
if (c == '-') {
sgn = -1;
c = read();
}
long res = 0;
do {
res *= 10;
res += c - '0';
c = read();
} while (!isSpaceChar(c));
return res * sgn;
}

public int[] nia(int n) {
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = ni();
}
return a;
}

public String rs() {
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 String nextLine() {
int c = read();
while (isSpaceChar(c))
c = read();
StringBuilder res = new StringBuilder();
do {
res.appendCodePoint(c);
c = read();
} while (!isEndOfLine(c));
return res.toString();
}

public boolean isSpaceChar(int c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}

private boolean isEndOfLine(int c) {
return c == '\n' || c == '\r' || c == -1;
}

}

static PrintWriter w = new PrintWriter(System.out);
                  static class Student
    {
        int id;
        //int x;

        int y;
        //long z;

        Student(int id,int y)
        {
            this.id = id;
            //this.x = x;
            //this.s = s;
            this.y = y;
           // this.z = z;

        }

    }
}


import java.io.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

public class compete604d {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		PrintWriter w = new PrintWriter(System.out);
		int[] vals = new int[4];
		for(int j = 0; j < 4; j++) {
			vals[j] = Integer.parseInt(st.nextToken());
		}
	 List<Integer> res = getRes(val);
             if(res==null)
                 w.println("NO");
             else
             {
                 w.println("YES");
                 for(int i=0;i<res.size();i++)
                 {
                     w.print(res.get(i) + " ");
                 }
             }

	}
	public static List<Integer> getRes(int []val)
    {
        LinkedList<Integer> res1 = new LinkedList<>();
        while(val[2] > 0 && val[3] > 0)
        {
            res1.addLast(2);
           res1.addLast(3);
           val[2]--;
           val[3]--;

        }
        LinkedList<Integer> res2 = new LinkedList<>();
        while(val[0] > 0 && val[1] > 0)
        {
            res2.addFirst(1);
           res2.addFirst(0);
           val[1]--;
           val[0]--;

        }
        while(val[1] > 0 && val[2] > 0)
        {
            res2.addLast(2);
           res2.addLast(1);
           val[2]--;
           val[1]--;

        }
        if(res1.isEmpty() && val[0] > 0)
        {
            res2.addLast(0);
            val[0]--;
        }
        if(res2.isEmpty() && val[3] > 0)
        {
            res1.addFirst(3);
            val[3]--;
        }
        res2.addAll(res1);
        if(val[2] > 0 && (res2.isEmpty() || res2.getLast() != 0))
        {
            res2.add(2);
            val[2]--;
        }
        if(val[1] > 0 && (res2.isEmpty() || res2.getFirst() != 3))
        {
            res2.add(1);
            val[1]--;
        }
        if(val[0] + val[1] + val[2] + val[3] > 0)
            return null;
        else
            return res2;

    }
}


//package learning;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class NitsLocal {
    static ArrayList<String> s1;
    static boolean[] prime;
    static int n = (int)1e7;

     static void sieve() {
Arrays.fill(prime	, true);
prime[0] = prime[1] = false;
for(int i = 2 ; i * i <= n ; ++i) {
if(prime[i]) {
for(int k = i * i; k<= n ; k+=i) {
prime[k] = false;
}
}
}

}
    public static void main(String[] args) {
        InputReader sc = new InputReader(System.in);

           prime  = new boolean[n + 1];
           //sieve();
                prime[1] = false;
                /*
              int n = sc.ni();
              int []a = sc.nia(n);
              int mod = 1000000007;
              long ans = 0;
              int f = 0;
              int q = sc.ni();
              while(q-- > 0)
              {
                  int num = sc.ni();
                  ans = 0;
                  if(num == 0)
                  {
                      a[sc.ni()-1] = sc.ni();
                  }
                 else
                  {
                      int l = sc.ni();
                      int r = sc.ni();
                    for(int i=l-1;i<r;i++)
                   {

                   for(int j=i+1;j<r;j++)
                   {
                      f = 0;

                      int x = a[i];
                      int y = a[j];
                      while(x > 0 && y > 0)
                      {
                          int y1 = x%10;
                          int y2 = y%10;
                          if(y1 > 0 && y2 > 0)
                          {
                              f = 1;
                          }
                          x /= 10;
                          y /= 10;
                      }

                     if(f==0)
                     {
                         ans = (ans + ((((long)a[i]%mod) * ((long)a[j]%mod)))%mod)%mod;
                     }
                  }
              }

              w.println(ans);
                  }
              }

            */
                /*
               int t  = sc.ni();
               while(t-- > 0)
               {
                   int n = sc.ni();
                   Student []st = new Student[n];
                   for(int i=0;i<n;i++)
                   {
                       st[i] = new Student(sc.ni(),sc.ni());
                   }
                   Arrays.sort(st,(p,q)->p.id-q.id);
                   if(n==1)
                       w.println("0");
                   else
                   {
                    int prev = 0;
                    int adv = 0;
                    int max = -1;
                    int min = 1000000000;
                    for(int i=0;i<n;i++)
                    {
                        min = Math.min(st[i].y,min);
                        max = Math.max(st[i].y,max);
                    }
                        if(st[0].y > st[1].y)
                        {
                            prev = st[0].id;
                        }
                        else
                            prev= st[0].y;
                         if(st[n-1].id < st[n-2].y)
                        {
                            adv = st[n-1].id;
                        }
                        else
                            prev= st[n-1].y;
                         w.println(adv-prev);

                   }
               }
             */int []val = new int[4];
             for(int i=0;i<4;i++)
             {
                 val[i] = sc.ni();
             }

             List<Integer> res = getRes(val);
             if(res==null)
                 w.println("NO");
             else
             {
                 w.println("YES");
                 for(int v : res) {
				w.print(v + " ");
			}
             }

       w.close();

    }
    public static List<Integer> getRes(int []val)
    {
        LinkedList<Integer> res1 = new LinkedList<>();
        while(val[3] > 0 && val[2] > 0)
        {
            res1.addLast(2);
           res1.addLast(3);
           val[2]--;
           val[3]--;

        }
        LinkedList<Integer> res2 = new LinkedList<>();
        while(val[0] > 0 && val[1] > 0)
        {
            res2.addFirst(1);
           res2.addFirst(0);
           val[1]--;
           val[0]--;

        }
        while(val[1] > 0 && val[2] > 0)
        {
            res2.addLast(2);
           res2.addLast(1);
           val[2]--;
           val[1]--;

        }
        if(val[0] > 0 && res1.isEmpty())
        {
            res2.addLast(0);
            val[0]--;
        }
        if(val[3] > 0 && res2.isEmpty())
        {
            res1.addFirst(3);
            val[3]--;
        }
        res2.addAll(res1);
        if(val[2] > 0 && (res2.isEmpty() || res2.getLast() != 0))
        {
            res2.add(2);
            val[2]--;
        }
        if(val[1] > 0 && (res2.isEmpty() || res2.getFirst() != 3))
        {
            res2.add(1);
            val[1]--;
        }
        if(val[0] + val[1] + val[2] + val[3] > 0)
            return null;

            return res2;

    }
    public static int upperBound(int []arr,int n,int num)
    {
        int l = 0;
        int r = n;
        while(l < r)
        {
            int mid = (l+r)/2;
            if(num >= arr[mid])
            {
                l = mid +1;
            }
            else
                r = mid;
        }
        return l;
    }
    public static int countSetBits(int number){
        int count = 0;
        while(number>0){
            ++count;
            number &= number-1;
        }
        return count;
    }

     static  class CustomerSortingComparator
                                implements Comparator<Temp> {

    @Override
    public int compare(Temp cust1, Temp cust2) {

        // all comparison
        int compareName = 0;
        if(cust1.a < cust2.a)
            return 1;

        else if(cust1.a > cust2.a)
        return -1;
        else
        {
            if(cust1.b < cust2.b)
                return 1;
            else
                return -1;

        }

        }

    }

    public static long pow(long i, long j) {
		long res=1L;
		for(int a=0;a<j;a++) res*=i;
		return res;
	}
    public static long powmod(long i, long j,long MOD) {
		if(j==0) return 1L;
		if(j%2==0) {
			long temp=powmod(i,j/2,MOD);
			return (temp*temp)%MOD;
		}
		return (i*powmod(i,j-1,MOD))%MOD;
	}
    static HashSet<Integer> fac;
    public static void primeFactors(int n)
    {
        // Print the number of 2s that divide n
        int t = 0;
        while (n%2==0)
        {
            fac.add(2);
            n /= 2;
        }

        // n must be odd at this point.  So we can
        // skip one element (Note i = i +2)
        for (int i = 3; i*i <= n; i+= 2)
        {
            // While i divides n, print i and divide n
            while (n%i == 0)
            {
                fac.add(i);
                n /= i;
            }
        }

        // This condition is to handle the case whien
        // n is a prime number greater than 2
        if (n > 2)
            fac.add(n);
    }
     static long modexp(long x,long n,long M)
{
    long power = n;
    long result=1;
    x = x%M;
    while(power>0)
    {
        if(power % 2 ==1)
            result=(result * x)%M;
        x=(x*x)%M;
        power = power/2;
    }
    return result;
}
    static long gcd(long a,long b)
    {
        if(a==0)
            return b;
        else
            return gcd(b%a,a);
    }
    static class Temp{
        int a;
        int b;
        int c;
        int d;

        Temp(int a,int b,int c,int d)
        {
            this.a = a;
            this.b = b;
            this.c  =c;
            this.d = d;
            //this.d = d;
        }
    }
    static class Query{
        int p;
        int index;
        int value;
        public Query(int p,int index,int value)
        {
            this.p = p;
            this.index = index;
            this.value = value;

        }
    }
    static int nextPowerOf2(int n)
    {
        int count = 0;

        // First n in the below
        // condition is for the
        // case where n is 0
        if (n > 0 && (n & (n - 1)) == 0)
            return n;

        while(n != 0)
        {
            n >>= 1;
            count += 1;
        }

        return 1 << count;
    }

   static long sum1(int t1,int t2,int x,int []t)
   {
       int mid = (t2-t1+1)/2;
  if(t1==t2)
      return 0;

   else
   return sum1(t1,mid-1,x,t) + sum1(mid,t2,x,t);

   }

    static String replace(String s,int a,int n)
    {
        char []c = s.toCharArray();
        for(int i=1;i<n;i+=2)
        {
            int num = (int) (c[i] - 48);
            num += a;
            num%=10;
            c[i] = (char) (num+48);
        }
        return new String(c);
    }
    static String move(String s,int h,int n)
    {
        h%=n;
        char []c = s.toCharArray();
        char []temp = new char[n];
        for(int i=0;i<n;i++)
        {
            temp[(i+h)%n] = c[i];
        }
        return new String(temp);
    }

     public static int ip(String s){
return Integer.parseInt(s);
}
     static class multipliers implements Comparator<Long>{

  public int compare(Long a,Long b) {
   if(a<b)
    return 1;
   else if(b<a)
    return -1;
   else
    return 0;
  }
 }
     static class multipliers1 implements Comparator<Student>{

  public int compare(Student a,Student b) {
   if(a.y<b.y)
    return 1;
   else if(b.y<a.y)
    return -1;
   else
   {
       if(a.id < b.id)
           return 1;
       else if(b.id<a.id)
           return -1;
       else
           return 0;

    //return 0;
   }
  }
 }
    // Java program to generate power set in
// lexicographic order.

      static class InputReader {

private final InputStream stream;
private final byte[] buf = new byte[8192];
private int curChar, snumChars;

public InputReader(InputStream st) {
this.stream = st;
}

public int read() {
if (snumChars == -1)
throw new InputMismatchException();
if (curChar >= snumChars) {
curChar = 0;
try {
snumChars = stream.read(buf);
} catch (IOException e) {
throw new InputMismatchException();
}
if (snumChars <= 0)
return -1;
}
return buf[curChar++];
}

public int ni() {
int c = read();
while (isSpaceChar(c)) {
c = read();
}
int sgn = 1;
if (c == '-') {
sgn = -1;
c = read();
}
int res = 0;
do {
res *= 10;
res += c - '0';
c = read();
} while (!isSpaceChar(c));
return res * sgn;
}

public long nl() {
int c = read();
while (isSpaceChar(c)) {
c = read();
}
int sgn = 1;
if (c == '-') {
sgn = -1;
c = read();
}
long res = 0;
do {
res *= 10;
res += c - '0';
c = read();
} while (!isSpaceChar(c));
return res * sgn;
}

public int[] nia(int n) {
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = ni();
}
return a;
}

public String rs() {
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 String nextLine() {
int c = read();
while (isSpaceChar(c))
c = read();
StringBuilder res = new StringBuilder();
do {
res.appendCodePoint(c);
c = read();
} while (!isEndOfLine(c));
return res.toString();
}

public boolean isSpaceChar(int c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}

private boolean isEndOfLine(int c) {
return c == '\n' || c == '\r' || c == -1;
}

}

static PrintWriter w = new PrintWriter(System.out);
                  static class Student
    {
        int id;
        //int x;

        int y;
        //long z;

        Student(int id,int y)
        {
            this.id = id;
            //this.x = x;
            //this.s = s;
            this.y = y;
           // this.z = z;

        }

    }
}