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

public final class serv
{
    static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static FastScanner sc=new FastScanner(br);
    static PrintWriter out=new PrintWriter(System.out);
	static Random rnd=new Random();
	static List<Pair> list=new ArrayList<>();
	static Pair[] a;
	static ArrayList<Integer>[] al;
	static int n;
	
	static int get(int val)
	{
		int low=1,high=n;
		
		while(low<high)
		{
			int mid=(low+high+1)>>1;
			
			if(a[n-mid].val>=val)
			{
				low=mid;
			}
			
			else
			{
				high=mid-1;
			}
		}
		
		return (a[n-low].val>=val?low:0);
	}
	
    public static void main(String args[]) throws Exception
    {	
		n=sc.nextInt();double x1=sc.nextDouble(),x2=sc.nextDouble();
		
		a=new Pair[n];
		
		for(int i=0;i<n;i++)
		{
			a[i]=new Pair(i,-1,sc.nextInt());
		}
		
		Arrays.sort(a);
	
		for(int i=1;i<=n;i++)
		{
			list.add(new Pair(0,i,(int)Math.ceil(x1/(double)i)));
			
			list.add(new Pair(1,i,(int)Math.ceil(x2/(double)i)));
		}
		
		Collections.sort(list);
		
		int[] min=new int[2];Arrays.fill(min,Integer.MAX_VALUE);
		
		boolean ans=false;
		
		int idx=-1,take=-1,quant=-1,other=-1;
		
		for(int i=list.size()-1;i>=0;i--)
		{
			Pair curr=list.get(i);
			
			int now=curr.want;
			
			int zz=get(curr.val)-now;
			
			if(min[1-curr.idx]<=zz)
			{
				idx=curr.idx;
				
				take=curr.val;
				
				quant=curr.want;
				
				other=min[1-curr.idx];
				
				ans=true;break;
			}
			
			min[curr.idx]=Math.min(min[curr.idx],curr.want);
		}
		
		al=new ArrayList[2];
		
		for(int i=0;i<2;i++)
		{
			al[i]=new ArrayList<>();
		}
		
		boolean[] v=new boolean[n];
		
		for(int i=0;i<n;i++)
		{
			if(a[i].val>=take && quant>0)
			{
				quant--;
				
				v[i]=true;
				
				al[idx].add(a[i].idx);
			}
		}
		
		for(int i=n-1;i>=0;i--)
		{
			if(!v[i] && other>0)
			{
				al[1-idx].add(a[i].idx);
				
				other--;
			}
		}
		
		if(ans)
		{
			out.println("Yes");
			
			out.println(al[0].size()+" "+al[1].size());
		
			for(int x:al[0])
			{
				out.print((x+1)+" ");
			}
			
			out.println("");
			
			for(int x:al[1])
			{
				out.print((x+1)+" ");
			}
			
			out.println("");
		}
		
		else
		{
			out.println("No");
		}
		
		out.close();
    }
	
	private static class Pair implements Comparable<Pair>
	{
		int idx,want,val;
		
		public Pair(int idx,int want,int val)
		{
			this.idx=idx;this.want=want;
			
			this.val=val;
		}
		
		public int compareTo(Pair x)
		{
			return Integer.compare(this.val,x.val);
		}
	}
}
class FastScanner
{
    BufferedReader in;
    StringTokenizer st;

    public FastScanner(BufferedReader in) {
        this.in = in;
    }
	
    public String nextToken() throws Exception {
        while (st == null || !st.hasMoreTokens()) {
            st = new StringTokenizer(in.readLine());
        }
        return st.nextToken();
    }
	
	public String next() throws Exception {
		return nextToken().toString();
	}
	
    public int nextInt() throws Exception {
        return Integer.parseInt(nextToken());
    }

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

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