#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define m_p make_pair
#define vec vector
#define f first
#define s second
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("-O3")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx,mmx,tune=native")
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pw(x) (1LL<<x)
#define sz(x) (int)x.size()
#define endl '\n'
#define pb push_back
#define fast_ioi ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
//using namespace __gnu_cxx;
//using namespace __gnu_pbds;

#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
  enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifndef LOCAL
~debug() { cerr << endl; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i)); }
sim, class b dor(pair < b, c > d) {
  ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
  *this << "[";
  for (auto it = d.b; it != d.e; ++it)
    *this << ", " + 2 * (it == d.b) << *it;
  ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
//template<class T> using ordered_set=tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
//template<class T> bool umax(T &a, T b){return (a<b?a=b,1:0);}
template<class T> bool umin(T &a, T b){return (a>b?a=b,1:0);}
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ll,int> pli;
const ll inf=1e18;
const int Mx=5e6+56;
vec<pii>pr[Mx];
signed main()
{
    fast_ioi;
    int n;
    cin>>n;
    vec<int>a(n);
    for(auto &z : a){
        cin>>z;
    }
    vec<int>p(n);iota(all(p),0);
    auto cmp=[&](int i,int j){
        return a[i]<a[j];
    };
    sort(all(p),cmp);
    for(int t=0;t<n;t++){
        int i=p[t];

        for(int k=t+1;k<n;k++){
            int j=p[k];
            if(sz(pr[abs(a[j]-a[i])])){
//                cout<<i+1<<' '<<
                vec<pii>vl;
                vl.pb({a[i],i});
                vl.pb({a[j],j});
                for(auto &z : pr[abs(a[i]-a[j])]){
                    vl.pb({a[z.f],z.f});
                    vl.pb({a[z.s],z.s});
                    break;
                }
                sort(all(vl));
                cout<<"Yes"<<endl;
                cout<<vl[0].s+1<<' '<<vl[3].s+1<<' '<<vl[2].s+1<<' '<<vl[1].s+1;
                return 0;
            }
//            pr[abs(a[j]-a[]
        }
        for(int k=0;k<t;k++){
            int j=p[k];
            pr[abs(a[i]-a[j])].pb({i,j});
        }
    }
    cout<<"No";
    return 0;

}
/*
4 3
1 3 5 7
*/
