#include<bits/stdc++.h>

using namespace std;

#define pb push_back
#define sz(x) ((int)x.size())
#define all(x) x.begin(), x.end()
typedef vector<int> vi;
using ll = long long;
typedef pair<int, int> pii;
typedef unsigned long long ul;

const int mn = 2e5 + 5;
const int mod = 1e9 + 7;

int n, m;
int a[mn];

struct node {
	int p, value;

	bool operator<(const node &u) const {
		return value < u.value;
	}
} p[mn];

bool judge() {
	map<int, vector<pii>> s;
	for (int i = 1; i <= n; i++) {
		for (int j = i + 1; j <= n; j++) {
			int ans = p[i].value + p[j].value;
			if (s.count(ans)) s[ans].push_back({p[i].p, p[j].p});
			else {
				s[ans] = {make_pair(p[i].p, p[j].p)};
			}
		}
	}
	for (int i = 1; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			int ans = p[i].value + p[j].value;
			if (s.count(ans)) {
				for (const auto &u:s[ans]) {
					if (u.first != p[i].p && u.second != p[i].p && u.first != p[j].p && u.second != p[j].p) {
						puts("YES");
						printf("%d %d %d %d\n", u.first, u.second, p[i].p, p[j].p);
						return true;
					}

				}
			}
		}
	}
	return false;
}

int main() {
	//cin.sync_with_stdio(0);
#ifdef LOCAL
	freopen("../1.txt", "r", stdin);
	//freopen("../2.txt", "w", stdout);

	auto st = chrono::system_clock::now();
#endif

	cin >> n;
	for (int i = 1; i <= n; i++) {
		scanf("%d", &p[i].value);
		p[i].p = i;
	}
	sort(p + 1, p + n + 1);
	n = min(2000, n);
	if (!judge()) {
		puts("NO");
	}


#ifdef LOCAL
	auto ed = chrono::system_clock::now();
	auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(ed - st);
	std::cerr << "cost time " << diff.count() << "ms." << std::endl;
#endif
	return 0;
}