#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const int maxN = 205;
vector <int> v[2];

int dp[maxN][maxN][maxN][2][2];
int a[maxN];
int n;

int rec(int pos = 0, int s1 = 0, int s2 = 0, bool ac1 = 0, bool ac2 = 0) {
	if(pos == n) return (s1 == s2 && ac1 && ac2);

	int &res = dp[pos][s1][s2][ac1][ac2];
	if(~res) return res;

	res = rec(pos + 1, s1, s2, ac1, ac2);
	if(res) return res;

	// Give current pos to s1
	int new_s1 = (s1 + a[pos]) % 200;
	res = rec(pos + 1, new_s1, s2, ac1 || 1, ac2);
	if(res) {
		v[0].push_back(pos + 1);
		return res;
	}

	// Give current pos to s2
	int new_s2 = (s2 + a[pos]) % 200;
	res = rec(pos + 1, s1, new_s2, ac1, ac2 || 1);
	if(res) {
		v[1].push_back(pos + 1);
		return res;
	}

	return res;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);
	cin >> n;

	for(int i = 0; i < n; i++) {
		cin >> a[i];
		a[i] %= 200;
	}

	memset(dp, -1, sizeof dp);
	int res = rec();

	if(res) {
		sort(v[0].begin(), v[0].end());
		sort(v[1].begin(), v[1].end());
		
		cout << "Yes\n";
		cout << v[0].size();
		for(int &x : v[0]) {
			cout << ' ' << x;
		}
		cout << '\n';

		cout << v[1].size();
		for(int &x : v[1]) {
			cout << ' ' << x;
		}
	}
	else {
		cout << "No";
	}
}
#include <bits/stdc++.h>

#define debug(x) cerr << #x << " = " << x << endl

using namespace std;
typedef long long LL;

const int MAXN = 55;
const int MOD = 1E9 + 7;
LL n, x, a[MAXN], g[MAXN], lim[MAXN], dp[MAXN][2];

template <class T>
void read(T& x) {
    x = 0;
    T f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') f = (ch == '-' ? -1 : 1), ch = getchar();
    while (ch >= '0' && ch <= '9') x = x * 10 + ch - 48, ch = getchar();
    x *= f;
}

template <class T, class... Args>
void read(T& x, Args&... args) {
    read(x), read(args...);
}

template <class T>
void write(T x) {
    if (x < 0) putchar('-'), x = -x;
    if (x > 9) write(x / 10);
    putchar(x % 10 + '0');
}

signed main() {
    // freopen("1.in", "r", stdin);
    read(n, x);
    for (int i = 1; i <= n; i++) read(a[i]);
    for (int i = n; i >= 1; i--) {
        if (!x) break;
        g[i] = x / a[i], x %= a[i];
    }
    for (int i = n - 1; i >= 1; i--) {
        lim[i] = a[i + 1] / a[i];
        dp[i][0] = (g[i] != 0);
        dp[i][1] = (g[i] != lim[i] - 1);
        if (g[i] == 0) {
            dp[i][0] += dp[i + 1][0];
            dp[i][1] += dp[i + 1][1] + dp[i + 1][0];
        } else if (g[i] == lim[i] - 1) {
            dp[i][0] += dp[i + 1][0] + dp[i + 1][1];
            dp[i][1] += dp[i + 1][1];
        } else {
            dp[i][1] += dp[i + 1][1] + dp[i + 1][0];
            dp[i][0] += dp[i + 1][0] + dp[i + 1][1];
        }
    }
    cout << dp[1][0] + 1;
    return 0;
}