#include <bits\stdc++.h>
using namespace std;
long long mod=1e9+7;
long long x1,x2;
struct node
{
    long long x;
    int id;
} a[300005];
bool cmp(node b,node c)
{
    return b.x<c.x;
}

int main()
{
    int n;
    scanf("%d%I64d%I64d",&n,&x1,&x2);
    for(int i=0; i<n; i++)
        scanf("%I64d",&a[i].x),a[i].id=i+1;
    sort(a,a+n,cmp);
    int flag1=0,flag2=0;
    for(int i=n-1; i>=0; i--)
    {
        if(a[i].x*(n-i)>=x2&&!flag1)
        {
            for(int j=i-1; j>=0; j--)
            {
                if(a[j].x*(i-j)>=x1)
                {
                    printf("YES\n");
                    {
                        printf("%d %d\n",i-j,n-i);
                        for(int k=i-1; k>=j; k--)
                        {
                            printf("%d ",a[k].id);
                        }
                        printf("\n");
                        for(int k=n-1; k>=i; k--)
                        {
                            printf("%d ",a[k].id);
                        }
                        printf("\n");
                    }
                    return 0;
                }
            }
            flag1=1;
        }
        if(a[i].x*(n-i)>=x1&&!flag2)
        {
            flag2=1;
            for(int j=i-1; j>=0; j--)
            {
                if(a[j].x*(i-j)>=x2)
                {
                    printf("YES\n");
                    {
                        printf("%d %d\n",n-i,i-j);
                        for(int k=n-1; k>=i; k--)
                        {
                            printf("%d ",a[k].id);
                        }
                        printf("\n");
                        for(int k=i-1; k>=j; k--)
                        {
                            printf("%d ",a[k].id);
                        }
                        printf("\n");
                    }
                    return 0;
                }
            }
        }
    }
    printf("NO\n");
    return 0;
}
/*
6 16 8
3 5 2 9 8 7
*/
