#include <bits/stdc++.h>
using namespace std;
const long long NR = 1e6 + 10, oo = (1 << 30);
const long long MOD = 998244353;
int n, x1, x2;
vector<pair<int, int> > st1;
vector<pair<int, int> > st2;
vector<pair<int, int> > st3;
int dp[NR];
pair<int, int> a[NR];
signed main() {
  int i, st, mid, dr;
  cin >> n >> x1 >> x2;
  for (i = 1; i <= n; ++i) {
    cin >> a[i].first;
    a[i].second = i;
  }
  sort(a + 1, a + n + 1);
  int ans = -1;
  for (i = 1; i <= n; ++i) {
    st = i;
    dr = n;
    int sol = n + 1;
    while (st <= dr) {
      mid = (st + dr) / 2;
      if (a[i].first * (mid - i + 1) >= x1) {
        sol = mid;
        dr = mid - 1;
      } else {
        st = mid + 1;
      }
    }
    dp[sol] = i;
    if (sol != n + 1) {
      st1.push_back({i, sol});
    }
  }
  for (i = 1; i <= n; ++i) {
    st = i;
    dr = n;
    int sol = n + 1;
    while (st <= dr) {
      mid = (st + dr) / 2;
      if (a[i].first * (mid - i + 1) >= x2) {
        sol = mid;
        dr = mid - 1;
      } else {
        st = mid + 1;
      }
    }
    dp[sol] = i;
    if (sol != n + 1) {
      st2.push_back({i, sol});
    }
  }
  int min_dr1 = oo, min_dr = oo, max_st = -oo, max_st1 = -oo;
  for (auto it : st1) {
    max_st = max(max_st, it.first);
    min_dr = min(min_dr, it.second);
  }
  for (auto it : st2) {
    max_st1 = max(max_st1, it.first);
    min_dr1 = min(min_dr1, it.second);
  }
  if (min_dr1 < max_st) {
    cout << "Yes\n";
    for (auto it : st1) {
      if (it.first == max_st) {
        st3.push_back(it);
        break;
      }
    }
    for (auto it : st2) {
      if (it.second == min_dr1) {
        st3.push_back(it);
        break;
      }
    }
    cout << st3[0].second - st3[0].first + 1 << ' '
         << st3[1].second - st3[1].first + 1 << '\n';
    for (i = st3[0].first; i <= st3[0].second; ++i) {
      cout << a[i].second << ' ';
    }
    cout << '\n';
    for (i = st3[1].first; i <= st3[1].second; ++i) {
      cout << a[i].second << ' ';
    }
    cout << '\n';
    return 0;
  }
  if (min_dr < max_st1) {
    cout << "Yes\n";
    for (auto it : st1) {
      if (it.second == min_dr) {
        st3.push_back(it);
        break;
      }
    }
    for (auto it : st2) {
      if (it.first == max_st1) {
        st3.push_back(it);
        break;
      }
    }
    cout << st3[0].second - st3[0].first + 1 << ' '
         << st3[1].second - st3[1].first + 1 << '\n';
    for (i = st3[0].first; i <= st3[0].second; ++i) {
      cout << a[i].second << ' ';
    }
    cout << '\n';
    for (i = st3[1].first; i <= st3[1].second; ++i) {
      cout << a[i].second << ' ';
    }
    cout << '\n';
    return 0;
  }
  cout << "No" << '\n';
  return 0;
}
