#include <bits/stdc++.h>   using namespace std;   unsigned long long int expo_fast(long long int a, long long int b) {     a = a;     long long int result = 1;     while (b) {       if (b & 1) result = (result * a);       b >>= 1;       a = (a * a);     }     return (result);   }   void take_in(vector<long long int> *arr) {     for (int i = 0; i < arr->size(); i++) cin >> (*(arr))[i];   }   long long int gcd(long long int a, long long int b) {     if (b == 0) return a;     return gcd(b, a % b);   }   unsigned long long int power(long long int x, unsigned long long int y,                                long long int p) {     long long int res = 1;     x = x % p;     while (y > 0) {       if (y & 1) res = (res * x) % p;       y = y >> 1;       x = (x * x) % p;     }     return res;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     long long int n, x1, x2, done = 0;     cin >> n >> x1 >> x2;     vector<pair<long long int, long long int> > arr;     vector<long long int> dp(n + 1);     for (int i = 0; i < n; i++) {       long long int x;       cin >> x;       arr.push_back({x, i});     }     sort(arr.begin(), arr.end());     dp[n] = arr[n - 1].first;     for (int i = n - 1; i > 0; i--) {       dp[i] = max(dp[i + 1], arr[i - 1].first * (n - i + 1));     }     auto bs = [n](long long int x, long long int tar) -> long long int {       int low = 1, high = n, ans = n + 1;       while (low <= high) {         int mid = (low + high) / 2;         if (x * mid >= tar) {           ans = mid;           high = mid - 1;         } else           low = mid + 1;       }       return ans;     };     for (int i = 1; i <= n; i++) {       vector<int> indx;       long long int len = bs(arr[i - 1].first, x1);       if (i + len - 1 < n && dp[i + len] >= x2) {         done = 1;         cout <<  Yes n ;         for (int j = n; j >= 1; j--) {           if (dp[j] >= x2) {             indx.push_back(j);             indx.push_back(n);             break;           }         }         cout << len <<     << indx[1] - indx[0] + 1 <<   n ;         for (int k = i; k < i + len; k++) cout << arr[k - 1].second + 1 <<    ;         cout <<   n ;         for (int k = indx[0]; k <= n; k++) cout << arr[k - 1].second + 1 <<    ;         break;       }       if (!done) {         len = bs(arr[i - 1].first, x2);         if (i + len - 1 < n && dp[i + len] >= x1) {           done = 1;           cout <<  Yes n ;           for (int j = n; j >= 1; j--) {             if (dp[j] >= x1) {               indx.push_back(j);               indx.push_back(n);               break;             }           }           cout << indx[1] - indx[0] + 1 <<     << len <<   n ;           for (int k = indx[0]; k <= n; k++) cout << arr[k - 1].second + 1 <<    ;           cout <<   n ;           for (int k = i; k < i + len; k++) cout << arr[k - 1].second + 1 <<    ;           break;         }       }     }     if (!done) cout <<  No ;   }   