#include <bits/stdc++.h>
using namespace std;
long long n;
vector<pair<long long, long long> > serv;
bool check(long long x1, long long x2) {
  long long pos = 0;
  bool found = false;
  for (long long i = n - 1; i >= 0; --i) {
    if (serv[i].first * (n - i) >= x2) {
      found = true;
      pos = i;
      break;
    }
  }
  if (!found) {
    return false;
  }
  found = false;
  for (long long i = pos - 1; i >= 0; --i) {
    if (serv[i].first * (pos - i) >= x1) {
      found = true;
      break;
    }
  }
  return found;
}
pair<vector<long long>, vector<long long> > print(long long x1, long long x2) {
  vector<long long> a1, a2;
  long long pos = 0;
  for (long long i = n - 1; i >= 0; --i) {
    a2.push_back(serv[i].second);
    if (serv[i].first * (n - i) >= x2) {
      pos = i;
      break;
    }
  }
  for (long long i = pos - 1; i >= 0; --i) {
    a1.push_back(serv[i].second);
    if (serv[i].first * (pos - i) >= x1) {
      break;
    }
  }
  return {a1, a2};
}
void solve() {
  long long x1 = 0, x2 = 0;
  cin >> n >> x1 >> x2;
  serv.resize(n);
  for (long long i = 0; i < n; ++i) {
    cin >> serv[i].first;
    serv[i].second = i;
  }
  sort(serv.begin(), serv.end());
  if (check(x1, x2)) {
    cout << "Yes" << endl;
    auto ans = print(x1, x2);
    cout << ans.first.size() << " " << ans.second.size() << endl;
    for (long long x : ans.first) cout << x + 1 << " ";
    cout << endl;
    for (long long x : ans.second) cout << x + 1 << " ";
    cout << endl;
  } else if (check(x2, x1)) {
    cout << "Yes" << endl;
    auto ans = print(x2, x1);
    cout << ans.second.size() << " " << ans.first.size() << endl;
    for (long long x : ans.second) cout << x + 1 << " ";
    cout << endl;
    for (long long x : ans.first) cout << x + 1 << " ";
    cout << endl;
  } else {
    cout << "No" << endl;
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  solve();
  return 0;
}
