#include <bits/stdc++.h>
using namespace std;
const int maxn = 300000 + 47;
int n, x1, x2;
pair<int, int> a[maxn];
int vis[maxn];
void Print() {
  puts("Yes");
  for (int i = 1; i <= n; i++) {
    if (vis[i] == 1) {
      int l = (x1 - 1) / a[i].first + 1;
      for (int j = 0; j < l; j++) printf("%d ", a[i + j].second);
      puts("");
      break;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i] == 2) {
      int l = (x2 - 1) / a[i].first + 1;
      for (int j = 0; j < l; j++) printf("%d ", a[i + j].second);
      puts("");
      break;
    }
  }
}
bool Dfs(int k, int s) {
  if (k > n + 1) return false;
  if (k == n + 1) {
    if (s == 3) {
      Print();
      return true;
    }
    return false;
  }
  if (Dfs(k + 1, s)) return true;
  if (!(s & 1)) {
    vis[k] = 1;
    int l = (x1 - 1) / a[k].first + 1;
    if (Dfs(k + l, s | 1)) {
      vis[k] = 0;
      return true;
    }
    vis[k] = 0;
  }
  if (!(s & 2)) {
    vis[k] = 2;
    int l = (x2 - 1) / a[k].first + 1;
    if (Dfs(k + l, s | 2)) {
      vis[k] = 0;
      return true;
    }
    vis[k] = 0;
  }
  return false;
}
int main() {
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i].first), a[i].second = i;
  sort(a + 1, a + n + 1);
  if (!Dfs(1, 0)) puts("No");
}
