/*
**    author : Dhiraj Govindvira
**      date : 08 May 2021 ~ Saturday
**      time : 05:35:49 PM
*/

#include <bits/stdc++.h>
using namespace std;

#ifdef DHIRAJ
    #include "D:/dhiraj/Programming/debug.h"
#else
    #define dbg(...) 1
    #define cerr if(0) cerr
#endif

using ll = long long int;
#define endl '\n'

template <typename T, typename U>
inline istream & operator >> (istream &in, pair<T, U> &p) {
    in >> p.first >> p.second;
    return in;
}
template <typename T>
inline istream & operator >> (istream &in, vector<T> &v) {
    for(T &x : v) in >> x;
    return in;
}

// count total non empty subset with given sum

const ll MX = 202;
ll n;
ll a[MX];
ll dp[MX][MX];

const ll MOD = 200;
inline ll md(ll x, ll M = MOD)
{
    x %= M;
    return ((x < 0) ? (x + M) : x);
}

ll rec(ll item, ll sum)
{
    assert(sum < 200);
    if(item == 0) return sum == 0;
    ll &ans = dp[item][sum];
    if(ans != -1) return ans;
    ans = 0;
    ans += rec(item - 1, md(sum - a[item]));
    ans += rec(item - 1, sum);
    ans = min(5ll, ans);
    return ans;
}
 
void f1(ll item, ll sum, vector<ll> &v)
{
    if(item == 0) {
        return;
    }
    if(v.empty() and rec(item - 1, a[item]) > 1) {
        v.push_back(item);
        f1(item - 1, md(sum - a[item]), v);
    }
    else if(rec(item - 1, sum)) {
        f1(item - 1, sum, v);
    }
    else {
        v.push_back(item);
        f1(item - 1, md(sum - a[item]), v);
    }
}
void f2(ll item, ll sum, vector<ll> &v)
{
    if(item == 0) {
        return;
    }
    if(rec(item - 1, md(sum - a[item]))) {
        v.push_back(item);
        f2(item - 1, md(sum - a[item]), v);
    }
    else {
        f2(item - 1, sum, v);
    }
}

void solve(ll &tc)
{
    cin >> n;
    for(ll i = 1; i <= n; i++) {
        cin >> a[i];
        a[i] = md(a[i]);
    }

    memset(dp, -1, sizeof(dp));
    for(ll i = 0; i < 200; i++)
    {
        ll cnt = rec(n, i);
        assert(cnt >= 0);
        if(i == 0) cnt--;
        if(cnt > 1)
        {
            vector<ll> b, c;
            f1(n, i, b);
            f2(n, i, c);

            ll sm1 = 0;
            for(ll x : b) {
                sm1 += a[x];
                sm1 = md(sm1);
            }
            ll sm2 = 0;
            for(ll x : c) {
                sm2 += a[x];
                sm2 = md(sm2);
            }

            sort(b.begin(), b.end());
            sort(c.begin(), c.end());

            if(!b.empty() and !c.empty() and b != c and sm1 == i and sm2 == i) {
                cout << "Yes\n";
                cout << b.size() << " ";
                for(auto &X : b) {
                    cout << X << " ";
                }
                cout << endl;
                cout << c.size() << " ";
                for(auto &X : c) {
                    cout << X << " ";
                }
                cout << endl;
                return;
            }
        }
    }
    cout << "No\n";
}

int main()
{
    #ifdef DHIRAJ
        freopen("D:/dhiraj/Programming/i1.txt", "r", stdin);
        freopen("D:/dhiraj/Programming/o1.txt", "w", stdout);
        freopen("D:/dhiraj/Programming/e1.txt", "w", stderr);
    #endif

    ios::sync_with_stdio(0);
    cin.tie(0);

    ll rep = 3;
    while(rep--) {
        ll tc = 1;
        for(ll i = 1; i <= tc; i++) {
            cerr << "Case #" << i << "\n";
            solve(i);
        }
        if(dbg()) break;
    }
    return 0;
}
#include <bits/stdc++.h>
typedef long long ll;
typedef long double ld;
#define fr(i, a, b) for (ll i = a; i < b; i++)
#define rf(i, a, b) for (ll i = a; i >= b; i--)
typedef std::vector<long long> vi;
#define F first
#define S second
#define fast                      \
    ios_base::sync_with_stdio(0); \
    cin.tie(0);                   \
    cout.tie(0);
#define mod 1000000007
#define PB push_back
#define MP make_pair
#define PI 3.14159265358979323846
#define all(a) a.begin(), a.end()
#define mx(a) *max_element(all(a))
#define mn(a) *min_element(all(a))
const ll INF = LLONG_MAX / 2;
const ll N = 2e5 + 1;
using namespace std;
void solve()
{
    ll n;
    cin >> n;
    ll a[n];
    map<ll, ll> mp;
    ll ans = -1;
    fr(i, 0, n)
    {
        cin >> a[i];
        a[i] = a[i] % 200;
        mp[a[i]]++;
        if (mp[a[i]] > 1)
        {
            ans = a[i];
            break;
        }
    }
    if (ans != -1)
    {
        cout << "Yes\n";
        ll co = 0;
        fr(i, 0, n)
        {
            if (a[i] == ans)
            {
                co++;
                cout << "1 " << i + 1 << "\n";
                if (co == 2)
                    return;
            }
        }
    }
    else
    {
        map<ll, vi> mp;
        for (ll i = 0; i < min((2 << n), 201); i++)
        {
            vi subset;
            ll sum = 0;
            fr(j, 0, n)
            {
                ll c = 1 << j;
                if (c & i)
                {
                    subset.PB(j);
                    sum = (sum + a[j]) % 200;
                }
            }
            if (subset.size() == 0)
                continue;
            if (mp.find(sum) == mp.end())
                mp[sum] = subset;
            else if (subset != mp[sum])
            {
                // cout << sum << "\n";
                cout << "Yes\n";
                cout << mp[sum].size() << " ";
                fr(i, 0, mp[sum].size())
                        cout
                    << mp[sum][i] + 1 << " ";
                cout << "\n";
                cout << subset.size() << " ";
                fr(i, 0, subset.size())
                        cout
                    << subset[i] + 1 << " ";
                cout << "\n";
                return;
            }
        }

        cout << "No\n";
        return;
    }
}
int main()
{
    fast;
    ll t = 1;
    //    std::cin >> t;
    while (t--)
    {
        solve();
    }
}