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

public class C {
	public static int lowerBound(int x,pair []a)
	{
		int lo=0;
		int hi=a.length-1;
		int ans=-1;
		while(lo<=hi)
		{
			int mid=(lo+hi)/2;
			if(a[mid].v<x)
				lo=mid+1;
			else
			{
				ans=mid;
				hi=mid-1;
			}
		}
		return ans;
	}
	public static void main(String[] args) throws IOException {
		Scanner sc=new Scanner(System.in);
		PrintWriter pw=new PrintWriter(System.out);
		int n=sc.nextInt(),x1=sc.nextInt(),x2=sc.nextInt();
		pair []c=new pair [n];
		long []sum=new long [n];
		for(int i=0;i<n;i++)
			c[i]=new pair(sc.nextInt(),i);
		Arrays.sort(c);
		for(int i=0;i<n;i++)
			if(i==0)
				sum[i]=c[i].v;
			else
				sum[i]=c[i].v+sum[i-1];
		
		for(int i=1;i<n-1;i++)
		{
			
			int minNeeded=(x1+i-1)/i;
			int idx=lowerBound(minNeeded,c);
			if(idx==-1)
				continue;
			if(idx+i-1>n-1)
				continue;
			
			int start=idx+i;
			//System.out.print(i+" "+idx+" "+start);
			/*int rightHalf=n-start-1;*/
			if(start<n && sum[n-1]-sum[start-1]>=x2)
			{
				
				int lo=start;
				
				int hi=n-1;
				int best=-1;
				while(lo<=hi)
				{
					int mid=(lo+hi)/2;
					long x=sum[n-1]-sum[mid-1];
					
					if(x>=x2)
					{
						lo=mid+1;
						best=mid;
					}
					else
						hi=mid-1;
				}
				if(best==-1)
					continue;
				
				int taken=n-best;
				minNeeded=(x2+taken-1)/taken;
				if(c[best].v>=minNeeded)
				{
					pw.println("Yes");
					pw.println(i+" "+taken);
					for(int j=idx;j<idx+i;j++)
					{
						pw.print((c[j].idx+1)+" ");
					}
					pw.println();
					for(int j=best;j<n;j++)
					{
						
						pw.print((c[j].idx+1)+" ");
					}
					pw.close();
					return;
				}
				
				
			}
			
		
			else
			{
				long S=0;
				if(start<n)
				{
					S=sum[n-1]-sum[start-1];
				}
				int lo=0;
				int hi=idx-1;
				int best=-1;
				while(lo<=hi)
				{
					int mid=(lo+hi)/2;
					long x=sum[idx-1];
					if(mid!=0)
						x-=sum[mid-1];
					x+=S;
					if(x>=x2)
					{
						lo=mid+1;
						best=mid;
					}
					else
						hi=mid-1;
				}
				if(best==-1)
					continue;
				
				int taken=n-best-i;
				minNeeded=(x2+taken-1)/taken;
				if(c[best].v>=minNeeded)
				{
					pw.println("Yes");
					pw.println(i+" "+taken);
					for(int j=idx;j<idx+i;j++)
					{
						pw.print((c[j].idx+1)+" ");
					}
					pw.println();
					for(int j=best;j<n;j++)
					{
						if(j<idx || j>=idx+1)
							pw.print((c[j].idx+1)+" ");
					}
					pw.close();
					return;
				}
				
			}
			
			
		}
		
		pw.println("No");
		pw.close();

	}
	static class pair implements Comparable<pair>
	{
		int v,idx;
		pair(int a,int b)
		{
			v=a;
			idx=b;
		}
		@Override
		public int compareTo(pair o) {
			if(v!=o.v)
				return v-o.v;
			else
				return 0;
		}
	}
	static class Scanner
	{
		BufferedReader br;
		StringTokenizer st;
		public Scanner(InputStream s)
		{
			br=new BufferedReader(new InputStreamReader(s));
		}
		public String nextLine() throws IOException
		{
			return br.readLine();
		}
		public String next() throws IOException
		{
			while(st==null || !st.hasMoreTokens())
				st=new StringTokenizer(br.readLine());
			return st.nextToken();
		}
		public int nextInt() throws IOException
		{
			return Integer.parseInt(next());
			
		}
		public double nextDouble() throws IOException
		{
			return Double.parseDouble(next());
		}
		public boolean ready() throws IOException
		{
			return br.ready();
		}
		public long nextLong() throws IOException
		{
			return Long.parseLong(next());
		}
	}
}
