#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "string"
#include "map"
#include "unordered_map"
#include "unordered_set"
#include "iomanip"
#include "cmath"
#include "random"
#include "bitset"
#include "cstdio"
#include "numeric"

using namespace std;

const long long int MOD = 1000000007;

long long int N, M, K, H, W, L, R;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> N >> M >> K;
	long long int a, b, c;
	cin >> a >> b >> c;
	cin >> R;
	vector<long long int>v(M);
	for (auto &i : v)cin >> i;
	int ans = 0;
	if ((N - 1)*b <= R)ans++;
	vector<vector<int>>dp(M, vector<int>(K - M + 1));
	for (int i = 0; i < M - 1; i++) {
		long long int r = v[i] - 1;
		long long int t = R - (v[i] - 1)*b;
	//	cout << "t " << t << endl;
		if (t >= 0) {
			r = max(r, v[i] + t / a);
			r = min(r, v[i + 1] - 1);
		}
		ans += max((long long int)0,r - v[i] + 1);
	//	cout << i << " " << ans << endl;
		long long int rbox = r;
		for (int j = 0; j <= K - M; j++)dp[i + 1][j] = dp[i][j];
		for (int j = 1; j <= K - M; j++) {
			t = R - (v[i] - 1)*b - ((rbox + 1) - v[i])*c;
		//	cout << "t " << t << endl;
			if (t >= 0) {
				rbox = max(rbox, rbox + 1 + t / a);
				rbox = min(rbox, v[i + 1] - 1);
				//	cout << i << " " << j << " " << rbox << endl;
				for (int k = K - M; k >= j; k--) {
					dp[i + 1][k] = max(dp[i + 1][k], dp[i][k - j] + (int)(rbox - r));
				}
			}
		}
	}
//	for (int i = 0; i < M; i++) {
//		for (int j = 0; j <= K - M; j++) {
//			cout << i << " " << j << " " << dp[i][j] << endl;
//		}
//	}
	ans--;
//	cout << ans << endl;
	cout << dp.back().back() + ans << endl;
	return 0;
} 
