//全力以赴
#include <bits/stdc++.h> 
using namespace std;
#define ll long long
#define ld long double
#define PI 3.141592653L
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
const ll INF = (ll)1e18;
const int N = 2e5 + 5;
const ll MOD = 1e9+7;
 
int parent[N];
const int dx[4] = {+1, 0, -1, 0};
const int dy[4] = {0, -1, 0, +1};
 
ll gcd(ll a, ll b) { 
    if (a == 0) 
        return b;  
    return gcd(b % a, a);  
}
 
ll extGcd(ll a, ll b, ll &x, ll &y) { // solves for x and y where ax+by=gcd(a,b)
    if(b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    ll d = extGcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}
 
ll modInv(ll a, ll p) { // solve for x=a^-1 where ax + py = 1 % p
    if(gcd(a, p) != 1) return -1; // modInv only exists if a and p are coprime (gcd(a, p) = 1)
    ll x, y;
    extGcd(a, p, x, y);
    x = (x % p + p) % p;
    return x;
}
   
ll lcm(ll a, ll b) {  
    return (a * b) / gcd(a,b);  
} 
 
/*
a^b: 
if b is even -> a^b = a^(b/2) * a^(b/2)
if b is odd -> a^b  = a * a^(b-1/2) * a^(b-1/2)
*/
ll modPow(ll a, ll n, ll mod) {
    ll res = 1;
    while (n > 0) {
        if (n & 1) res = (res * a) % mod;
        a = (a * a) % mod;
        n >>= 1;
    }
    return res;
}
 
int find(int x) {
    return x == parent[x] ? x : parent[x] = find(parent[x]);
}
 
void Union(int x, int y) {
    int xPar = find(x), yPar = find(y);
    if(xPar != yPar) parent[xPar] = yPar;
}
 
ll nCr(ll n, ll r) {
    ll res = 1;
    for(ll i=1;i<=r;i++) {
        res = res * (n - r + i) / i;
    }
    return res;
}
 
int ask(int i, int j) {
    cout << "? " << i + 1 << ' ' << j + 1 << endl;
    int v;
    cin >> v;
    return v;
}
 
int msbPos(int n) {
    if(n == 0) return 0;
    int msbPos = 0;
    n /= 2;
    while(n != 0) {
        n /= 2;
        msbPos++;
    }
    return msbPos;
}

void solve() {
    int n;
    cin >> n;
    vector<ll> a(n);
    for(int i=0;i<n;i++) {
        cin >> a[i];
    }
    int cnt = min(n, 8);
    vector<vector<int>> v(200, vector<int>(0));
    for(int i=1;i<(1<<cnt);i++) {
        ll sum = 0;
        vector<int> cur;
        for(int j=0;j<cnt;j++) {
            if(i & (1<<j)) {
                cur.push_back(j + 1);
                sum += a[j];
                sum %= 200;
            }
        }
        if(v[sum].size() != 0) {
            cout << "Yes" << endl;
            cout << cur.size() << ' ';
            for(auto x : cur) cout << x << ' ';
            cout << endl;
            cout << v[sum].size() << ' ';
            for(auto x : v[sum]) cout << x  << ' ';
            cout << endl;
            return;
        }
        v[sum] = cur;
    }
    cout << "No" << endl;
}

int main()  
{
    IOS
    //int t;
    //cin >> t;
    //while(t--) solve();
    solve();
    return 0; 
}
#include <bits/stdc++.h>
#define be(v) (v).begin(),(v).end()
#define pb(q) push_back(q)
#define rep(i, n) for(int i=0;i<n;i++)
#define all(i, v) for(auto& i : v)
typedef long long ll;
using namespace std;
const ll mod=1000000007, INF=(1LL<<60);
#define doublecout(a) cout<<fixed<<setprecision(10)<<a<<endl;

int main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    vector<ll> a(n);
    rep(i, n) cin >> a[i];
    n = min(n, 10);
    rep(bit1, 1 << n) {
        vector<int> v1;
        rep(i, n) if(bit1 >> i & 1) v1.pb(i);
        rep(bit2, 1 << n) {
            vector<int> v2;
            rep(i, n) if(bit2 >> i & 1) v2.pb(i);
            if(v1.empty() || v2.empty() || v1 == v2) continue;
            ll num = 0;
            all(e, v1) num += a[e];
            all(e, v2) num -= a[e];
            if(num % 200 == 0) {
                cout << "Yes" << endl;
                cout << v1.size();
                all(e, v1) cout << " " << e + 1; 
                cout << endl;
                cout << v2.size();
                all(e, v2) cout << " " << e + 1; 
                cout << endl;
                return 0;
            }
        }
    } 
    cout << "No" << endl;
    return 0;
}


