#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <queue>
#include <map>
#include <string>
#include <cmath>
#include <functional>
#include <algorithm>
#include <utility>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <iterator>
#include <fstream>
#include <iomanip>
#include <time.h>
#include <complex>
#include <windows.h>

using namespace std;

typedef double C;
typedef complex<C> P;

#define X real()
#define Y imag()
#define ui unsigned int
#define int long long
#define MP make_pair
#define timer fghge
#define y1 yjyjyju
#define all(X) (X).begin(), (X).end()
#define endl "\n"

signed main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	//freopen("lca_rmq.in", "r", stdin);
	//freopen("lca_rmq.out", "w", stdout);
	//freopen("input.txt", "r", stdin);

	int n, x, y; cin >> n >> x >> y;
	vector<int> a(n);
	for (auto &i : a)
		cin >> i;

	vector<vector<int>> sparse(log2(n) + 1, vector<int>(n));
	sparse[0] = a;

	for (int i = 1; i < sparse.size(); i++) {
		for (int j = 0; j < n - (1 << i) + 1; j++) {
			sparse[i][j] = min(sparse[i - 1][j], sparse[i - 1][j + (1 << (i - 1))]);
		}
	}

	for (int i = 0; i < n; i++) {
		int l = max(0LL, i - x), r = min(n - 1, i + y);
		int j = log2((i - 1) - l + 1), q = log2(r - (i + 1) + 1);

		if (i == 0) {
			if (min(sparse[q][i + 1], sparse[q][r - (1 << j) + 1]) > a[i]) {
				cout << i + 1;
				return 0;
			}
		}
		else if(i == n - 1) {
			if (min(sparse[j][l], sparse[j][i - 1 - (1 << j) + 1]) > a[i]) {
				cout << i + 1;
				return 0;
			}
		}
		else {
			if (min(sparse[q][i + 1], sparse[q][r - (1 << j) + 1]) >  a[i] && min(sparse[j][l], sparse[j][i - 1 - (1 << j) + 1]) > a[i]) {
				cout << i + 1;
				return 0;
			}
		}
	}
	return 0;
}