#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 300005
#define pi pair<int,int>
#define F first
#define S second
#define pb push_back
#define inf 1000000000LL
#define M 1000000007LL
#define ld long double
//||

//"\n"
vector<int> out1,out2;
pi c[N];
vector<pi> v;
int mark[N];
 main()
{
     ios::sync_with_stdio(false);
     cin.tie(0);
   int n,x1,x2,i,k;

   cin>>n>>x1>>x2;

   for(i=1;i<=n;i++)
   {
       cin>>c[i].F;
       c[i].S=i;
   }
   sort(c+1,c+n+1);
int fl=0;
   if(x1>x2)
    {
        fl=1;
        swap(x1,x2);
    }

   for(i=1;i<=min(x2,N*1LL+10);i++)
   {
       int ret=x2/i;
       if(x2%i)
          ret++;
       int j=lower_bound(c+1,c+n+1,pi(ret,-1LL))-c;
      // cout<<i<<" "<<j<<endl;
       if(n-j+1>=i)
       {

           int ct=0;
           for(k=j;k<=n;k++)
            {
                out1.pb(c[k].S);
                ct++;
                mark[k]=1;
                if(ct==i)
                    break;
            }
           break;
       }
   }
   for(i=1;i<=n;i++)
   {
       if(!mark[i])
        v.pb(c[i]);
   }
//   cout<<ind<<"\n";
//for(i=0;i<out1.size();i++)
  //  cout<<out1[i]<<" ";
if(v.size())
{


    for(i=1;i<=min(x1,N*1LL+10);i++)
   {
       int ret=x1/i;
       if(x1%i)
          ret++;
       int j=lower_bound(v.begin(),v.end(),pi(ret,-1LL))-v.begin();
       int ind=v.size()-1;
       if(ind-j+1>=i)
       {
          // ind=j-1;
           for(k=j;k<=ind;k++)
            out2.pb(v[k].S);
           break;
       }
   }
}
   if(!(out1.size() && out2.size()))
   {
       out1.clear();
       out2.clear();
       swap(x1,x2);
       memset(mark,0,sizeof(mark));
       fl=!fl;
       v.clear();
        for(i=1;i<=min(x2,N*1LL+10);i++)
   {
       int ret=x2/i;
       if(x2%i)
          ret++;
       int j=lower_bound(c+1,c+n+1,pi(ret,-1LL))-c;
      // cout<<i<<" "<<j<<endl;
       if(n-j+1>=i)
       {

           int ct=0;
           for(k=j;k<=n;k++)
            {
                out1.pb(c[k].S);
                ct++;
                mark[k]=1;
                if(ct==i)
                    break;
            }
           break;
       }
   }
   for(i=1;i<=n;i++)
   {
       if(!mark[i])
        v.pb(c[i]);
   }
//   cout<<ind<<"\n";
//for(i=0;i<out1.size();i++)
  //  cout<<out1[i]<<" ";
if(!v.size())
{


    for(i=1;i<=min(x1,N*1LL+10);i++)
   {
       int ret=x1/i;
       if(x1%i)
          ret++;
       int j=lower_bound(v.begin(),v.end(),pi(ret,-1LL))-v.begin();
       int ind=v.size()-1;
       if(ind-j+1>=i)
       {
          // ind=j-1;
           for(k=j;k<=ind;k++)
            out2.pb(v[k].S);
           break;
       }
   }
}
       //cout<<"No"<<"\n";


   }
    if(!(out1.size() && out2.size()))
    {
        cout<<"No"<<endl;
        return 0;
    }

   cout<<"Yes"<<"\n";
   if(fl)
   {
        cout<<out1.size()<<" "<<out2.size()<<"\n";
for(i=0;i<out1.size();i++)
    cout<<out1[i]<<" ";
cout<<"\n";

for(i=0;i<out2.size();i++)
    cout<<out2[i]<<" ";
cout<<"\n";
   }
   else
{
    cout<<out2.size()<<" "<<out1.size()<<"\n";
for(i=0;i<out2.size();i++)
    cout<<out2[i]<<" ";
cout<<"\n";

for(i=0;i<out1.size();i++)
    cout<<out1[i]<<" ";
cout<<"\n";
}


  return 0;
}
