#include<bits/stdc++.h>
using namespace std;
#define N 2
#define NN 205
#define For(i,x,y)for(i=x;i<=(y);i++)
int f[NN][NN][N][N][N],val[NN][NN][N][N][N],a[NN],used[NN];
pair<pair<int,int>,pair<bool,pair<bool,bool> > >pre[NN][NN][N][N][N];
int main()
{
	int n,i,j,k,p,tot=0,l,u,v;
	pair<pair<int,int>,pair<bool,pair<bool,bool> > >pa;
	cin>>n;
	For(i,1,n)cin>>a[i],a[i]%=200;
	f[0][0][0][0][0]=1;
	For(i,1,n)
	For(l,0,i-1)
	For(j,0,199)
	For(u,0,1)
	For(v,0,1)
	For(k,0,1)
	if(f[l][j][k][u][v])
	{
		p=(j+a[i])%200;
		f[i][p][1][1][v]=val[i][p][1][1][v]=1;
		pre[i][p][1][1][v]=make_pair(make_pair(l,j),make_pair(k,make_pair(u,v)));
		p=(j-a[i]+200)%200;
		f[i][p][1][u][1]=1;
		val[i][p][1][u][1]=2;
		pre[i][p][1][u][1]=make_pair(make_pair(l,j),make_pair(k,make_pair(u,v)));
		f[i][j][k][1][1]=1;
		val[i][j][k][1][1]=3;
		pre[i][j][k][1][1]=make_pair(make_pair(l,j),make_pair(k,make_pair(u,v)));
	}
	if(f[n][0][1][1][1])
	{
		puts("yEs");
		i=n;
		j=0;
		k=u=v=1;
		while(i)
		{
			/*cout<<i<<' '<<j<<' '<<k<<' '<<u<<' '<<v<<endl;*/
			used[i]=val[i][j][k][u][v];
			pa=pre[i][j][k][u][v];
			i=pa.first.first;
			j=pa.first.second;
			k=pa.second.first;
			u=pa.second.second.first;
			v=pa.second.second.second;
		}
	}
	else puts("nO"),exit(0);
	For(i,1,n)tot+=used[i]==1||used[i]==3;
	cout<<tot;
	For(i,1,n)
	if(used[i]==1||used[i]==3)cout<<' '<<i;
	cout<<endl;
	tot=0;
	For(i,1,n)tot+=used[i]==2||used[i]==3;
	cout<<tot;
	For(i,1,n)
	if(used[i]==2||used[i]==3)cout<<' '<<i;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int,int> P;

#define p_ary(ary,a,b) do { cout << "["; for (int count = (a);count < (b);++count) cout << ary[count] << ((b)-1 == count ? "" : ", "); cout << "]\n"; } while(0)
#define p_map(map,it) do {cout << "{";for (auto (it) = map.begin();;++(it)) {if ((it) == map.end()) {cout << "}\n";break;}else cout << "" << (it)->first << "=>" << (it)->second << ", ";}}while(0)

template<typename T1,typename T2>ostream& operator<<(ostream& os,const pair<T1,T2>& a) {os << "(" << a.first << ", " << a.second << ")";return os;}

const char newl = '\n';

int main() {
    int n;
    cin >> n;
    int a[210];
    for (int i = 0;i < n;++i) cin >> a[i];
    vector<vector<int>> dp(n+1,vector<int>(200,0));
    dp[0][0] = 1;
    for (int i = 0;i < n;++i) {
        dp[i+1] = dp[i];
        for (int j = 0;j < 200;++j) dp[i+1][(j+a[i])%200] += dp[i][j];
        for (int j = 0;j < 200;++j) dp[i+1][j] = min(dp[i+1][j],3);
    }
    dp[n][0]--;
    bool ok = false;
    int m;
    for (int i = 0;i < 200;++i) if (dp[n][i] > 1) {
        ok = true;
        m = i;
        break;
    }
    if (!ok) {
        cout << "No" << newl;
        return 0;
    }
    cout << "Yes" << newl;
    int z = m;
    for (int i = 0;i < n;++i) {
        for (int j = 0;j < n+1;++j) for (int k = 0;k < 200;++k) dp[j][k] = 0;
        dp[0][0] = 1;
        for (int j = 0;j < n;++j) {
            dp[j+1] = dp[j];
            if (i == j) continue;
            for (int k = 0;k < 200;++k) dp[j+1][(k+a[j])%200] += dp[j][k];
            for (int k = 0;k < 200;++k) dp[j+1][k] = min(dp[j+1][k],2);
        }
        int mm = (m-a[i]%200+200)%200;
        if (!(dp[n][m] && dp[n][mm])) continue;
        vector<int> b,c;
        for (int j = n-1;j >= 0;--j) {
            int u = (m-a[j]%200+200)%200;
            if (dp[j][u] == 0) continue;
            if (j == i) continue;
            b.push_back(j);
            m = u;
        }
        for (int j = n-1;j >= 0;--j) {
            int u = (mm-a[j]%200+200)%200;
            if (dp[j][u] == 0) continue;
            if (j == i) continue;
            c.push_back(j);
            mm = u;
        }
        c.push_back(i);
        reverse(b.begin(),b.end());
        sort(c.begin(),c.end());
        int x = b.size(),y = c.size();
        if (x == 0 || y == 0) continue;
        cout << x << " ";
        for (int j = 0;j < x;++j) cout << b[j]+1 << " \n"[j == x-1];
        cout << y << " ";
        for (int j = 0;j < y;++j) cout << c[j]+1 << " \n"[j == y-1];
        return 0;
    }
}