#include                        <bits/stdc++.h>
#include                        <ext/pb_ds/assoc_container.hpp>
#define lb                      lower_bound
#define ub                      upper_bound
#define fe(x)                   (*(x.begin()))
#define le(x)                   (*(x.rbegin()))
#define pb                      push_back
#define load(node,n)            bool operator < (const node &n) const
#define fbo(x,id)               (*(x.find_by_order(id)))
#define ook(y)                  order_of_key(y)
#define all(x)                  (x).begin(),(x).end()
#define si(a)                   scanf("%d",&a)
#define sii(a,b)                scanf("%d %d",&a,&b)
#define siii(a,b,c)             scanf("%d %d %d",&a,&b,&c)
#define sl(a)                   scanf("%lld",&a)
#define sll(a,b)                scanf("%lld %lld",&a,&b)
#define slll(a,b,c)             scanf("%lld %lld %lld",&a,&b,&c)
#define rep(i,a,b)              for(ll i = a; i<=b;  i++)
#define un(x)                   x.erase(unique(all(x)), x.end())
#define TT                      long long TC;  scanf("%lld",&TC);  while(TC--)
#define read                    freopen("input.txt","r",stdin)
#define write                   freopen("output.txt","w",stdout)
#define set(x)                  tree<x,null_type,less<x>,rb_tree_tag,tree_order_statistics_node_update>
#define assign(v,n,x)           v.clear(); for(int I = 0; I<n; I++)    v.pb(x);
#define SZ(x)                   (int)x.size()
#define ff                      first
#define ss                      second
using                           namespace __gnu_pbds;
using                           namespace std;
typedef                         long long ll;
typedef                         pair<ll,ll> pll;
typedef                         pair<int,int> pii;


#define mx 300005

pll ar[mx];
ll suff[mx],qq[mx];





main(){
//read;


ll n,a,b;
slll(n,a,b);

for(ll i = 1; i<=n; i++){
    sl(ar[i].ff);
    ar[i].ss = i;
}

sort(ar+1,ar+n+1);

vector<ll> v,A,B;

for(ll i = n,j = 1; i; i--,j++){
    suff[i] = ar[i].ff*j;
    qq[i] = max(suff[i],qq[i+1]);
    if(suff[i]>=b)  v.pb(i);
}

sort(all(v));

//cout<<endl;
//for(ll i = 1; i<=n; i++)
//    cout<<ar[i].ff<<" ";
//cout<<endl;

for(ll i = 1; i<=n; i++){
    ll p = a/i;
    if(a%i) p++;
    ll l = 1,r = n,m,id = -1;
    while(l<=r){
        m = l+r>>1;
        if(ar[m].ff>=p) r = m-1,id = m;
        else l = m+1;
    }
    if(id==-1 || id+i-1>n)  continue;

//    cout<<"HI "<<i<<" "<<id<<" "<<p<<endl;

    if(qq[id+i]>=b){
        for(ll j = id; j<=id+i-1; j++){
            A.pb(ar[j].ss);
        }
        for(ll j = n; j>id+i-1; j--){
            B.pb(ar[j].ss);
            if(qq[j]>=b)    break;
        }
        puts("Yes");
        cout<<SZ(A)<<" "<<SZ(B)<<endl;
        for(ll j:A)
            printf("%lld ",j);
        cout<<endl;
        for(ll j:B)
            printf("%lld ",j);
        return 0;
    }
    if(SZ(v)==0 || fe(v)>=id )  continue;
    ll x = fe(v);
    ll ache = n-x+1;
    ache-=i;
    if(ar[x].ff*ache>=b){
        for(ll j = id; j<=id+i-1; j++){
            A.pb(ar[j].ss);
        }
        ll cnt = 0;
        for(ll j = n; j>=x; j--){
            if(j>=id && j<=id+i-1)  continue;
            cnt++;
            B.pb(ar[j].ss);
            if(cnt*ar[j].ff>=b) break;
        }
        puts("Yes");
        cout<<SZ(A)<<" "<<SZ(B)<<endl;
        for(ll j:A)
            printf("%lld ",j);
        cout<<endl;
        for(ll j:B)
            printf("%lld ",j);
        return 0;
    }
}

cout<<"No";

return 0;
}

