import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class D {

	public static void main(String[] args){
		FastScanner scan = new FastScanner();
		PrintWriter out = new PrintWriter(System.out);
		int n = scan.nextInt(), x = scan.nextInt(), y = scan.nextInt();
		N[] a = new N[n];
		for(int i = 0; i < n; i++) a[i] = new N(scan.nextInt(), i+1);
		Arrays.sort(a);
		boolean gucci1 = false, gucci2 = false;
		int min = 0x3f3f3f3f;
		ArrayList<Integer> f = new ArrayList<Integer>();
		int i = 0;
		for(; i < n; i++) {
			min = Math.min(min, a[i].c);
			f.add(a[i].i);
			if((double)x/(i+1) <= min) {
				gucci1 = true;
				break; 
			}
		}
		ArrayList<Integer> l = new ArrayList<Integer>();
		min = 0x3f3f3f3f;
		int j = i;
		i++;
		for(; i < n; i++) {
			min = Math.min(min, a[i].c);
			l.add(a[i].i);
			if((double)y/(i-j) <= min) {
				gucci2 = true;
				break;
			}
		}
		if(gucci1 && gucci2) {
			out.println("Yes");
			out.println(f.size()+" "+l.size());
			for(int k : f) out.print(k+" ");
			out.println();
			for(int k : l) out.print(k+" ");
		} else {
			gucci1 = false; gucci2 = false;
			min = 0x3f3f3f3f;
			f = new ArrayList<Integer>();
			i = 0;
			for(; i < n; i++) {
				min = Math.min(min, a[i].c);
				f.add(a[i].i);
				if((double)y/(i+1) <= min) {
					gucci1 = true;
					break; 
				}
			}
			l = new ArrayList<Integer>();
			min = 0x3f3f3f3f;
			j = i;
			i++;
			for(; i < n; i++) {
				min = Math.min(min, a[i].c);
				l.add(a[i].i);
				if((double)x/(i-j) <= min) {
					gucci2 = true;
					break;
				}
			}	
			if(gucci1 && gucci2) {
				out.println("Yes");
				out.println(l.size()+" "+f.size());
				for(int k : l) out.print(k+" ");
				out.println();
				for(int k : f) out.print(k+" ");
			} else out.println("No");
		}
		out.close();
	}
	
	static class N implements Comparable<N> {
		int c, i;
		public N(int a, int b) {
			c = a;
			i = b;
		} 
		public int compareTo(N o) {
			return c-o.c;
		}
	}

	static class FastScanner {
		BufferedReader br;
		StringTokenizer st;

		public FastScanner() {
			try	{
				br = new BufferedReader(new InputStreamReader(System.in));
				st = new StringTokenizer(br.readLine());
			} catch (Exception e){e.printStackTrace();}
		}

		public String next() {
			if (st.hasMoreTokens())	return st.nextToken();
			try {st = new StringTokenizer(br.readLine());}
			catch (Exception e) {e.printStackTrace();}
			return st.nextToken();
		}

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

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

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

		public String nextLine() {
			String line = "";
			if(st.hasMoreTokens()) line = st.nextToken();
			else try {return br.readLine();}catch(IOException e){e.printStackTrace();}
			while(st.hasMoreTokens()) line += " "+st.nextToken();
			return line;
		}

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

		public long[] nextLongArray(int n){
			long[] a = new long[n];
			for(int i = 0; i < n; i++) a[i] = nextLong();
			return a;
		}

		public double[] nextDoubleArray(int n){
			double[] a = new double[n];
			for(int i = 0; i < n; i++) a[i] = nextDouble();
			return a;
		}

		public char[][] nextGrid(int n, int m){
			char[][] grid = new char[n][m];
			for(int i = 0; i < n; i++) grid[i] = next().toCharArray();
			return grid;
		}
	}


}
