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

typedef long long ll;

int main()
{
	ll n;
	cin >> n;
	vector<ll>arr(n);//存储每个数
	for (int i = 0; i < n; ++i)
	{
		cin >> arr[i];
	}

	ll k, d;
	cin >> k >> d;
	vector<vector<ll>>dp1(n + 1, vector<ll>(n + 1, LLONG_MIN));//记录从前i个人中选,第i个人必选,选了j个人时的最大乘积
	vector<vector<ll>>dp2(n + 1, vector<ll>(n + 1, LLONG_MAX));//记录从前i个人中选,第i个人必选,选了j个人时的最小乘积
	//注意,初始化一定要来个正无穷或者负无穷,不能为0
	//否则代码会在有些案例中出错,牛客检测不出来
	//比如
	//2
	//-1 50 
	//2 50
	//初始化为0会打印出0
	//但是正确答案应该为-50

	for (int i = 1; i <= n; ++i)//从前i个人中选
	{
		dp1[i][1] = arr[i - 1];
		dp2[i][1] = arr[i - 1];
		for (int j = 2; j <= k; ++j)//挑选几个人
		{
			if (j > i)//当j > i时,直接退出此次j的循环
			{
				break;
			}
			for (int z = 1; z <= d && (i - z) >= j - 1; z++)//前面挑选的最后一个人
				//i-z代表此次循环选择的那个位置,一定要满足与j不超过d
			{
				dp1[i][j] = max(max(dp1[i - z][j - 1] * arr[i - 1], dp2[i - z][j - 1] * arr[i - 1]), dp1[i][j]);
				dp2[i][j] = min(min(dp2[i - z][j - 1] * arr[i - 1], dp1[i - z][j - 1] * arr[i - 1]), dp2[i][j]);

			}
		}
	}

	ll Max = LLONG_MIN;
	for (int i = k; i <= n; ++i)
	{
		Max = max(Max, dp1[i][k]);
	}

	cout << Max << endl;
	return 0;
}