//new.cpp
/*
Author : Hocky Yudhiono
Sab 20 Apr 2019 02:14:04  WIB
Current Local Time : 14:14:04

getchar_unlocked > getchar > cin without sync > scanf > cin with sync
bool operator<(const MyStruct& rhs) const

On how to print Long Double to 5 decimal places :
printf("%.5Lf",ans);

On how to get random numbers :
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //For int
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); //For LL
cout << rng() << endl;
shuffle(isi.begin(),isi.end(),rng);

__gcd(a,b)
__builtin_ffs(a) first on bit
__builtin_clz(a) count leading zero
__builtin_ctz(a) count trailing zero
__builtin_popcount(a) numbers of on bits

*/

//#include <unordered_map>
//#include <unordered_set>

//#include <random>
//#include <chrono>

//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cassert>
#include <cstring>
#include <iomanip>
#include <cstdio>
#include <limits>
#include <string>
#include <vector>
#include <cmath>
#include <deque>
#include <queue>
#include <stack>
#include <map>
#include <set>

//using namespace __gnu_pbds;
using namespace std;

#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC optimize(3)
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC target("sse3","sse2","sse")
#pragma GCC target("avx","sse4","sse4.1","sse4.2","ssse3")
#pragma GCC target("f16c")
#pragma GCC optimize("inline","fast-math","unroll-loops","no-stack-protector")
// #pragma GCC diagnostic error "-fwhole-program"
// #pragma GCC diagnostic error "-fcse-skip-blocks"
// #pragma GCC diagnostic error "-funsafe-loop-optimizations"
// #pragma GCC diagnostic error "-std=c++14"
// #pragma GCC target ("string"...)
#pragma GCC push_options
#pragma GCC pop_options
#pragma GCC reset_options
#pragma GCC optimize ("O3")

typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
// typedef tree<long long, null_type, less<long long>, rb_tree_tag, tree_order_statistics_node_update> pbds;
//If the time limit is strict, try not to use long double


#define fbo find_by_order
#define ook order_of_key
#define mp make_pair
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define remove erase
//Remember to undefine if the problem is interactive
#define endl '\n'
#define DEBUG(X) cout << ">>> DEBUG(" << __LINE__ << ") " << #X << " = " << (X) << endl

const double eps = 1e-9;
const int INFMEM = 63;
const int INF = 1061109567;
const LL LINF = 4557430888798830399LL;
const double DINF = numeric_limits<double>::infinity();
const LL MOD = 1000000007;
const int dx[8] = {1,0,-1,0,1,1,-1,-1};
const int dy[8] = {0,1,0,-1,1,-1,1,-1};
const double PI = 3.141592653589793;

#ifdef _WIN32
#define getchar_unlocked getchar
#endif
#define GETCHAR getchar_unlocked
inline void fastll(LL &input_number) 
{
    input_number = 0;
    int ch = GETCHAR();
    int sign = 1;
    while(ch < '0' || ch > '9'){
        if(ch == '-') sign=-1;
        ch = GETCHAR();
    }
    while(ch >= '0' && ch <= '9'){
        input_number = (input_number << 3)+(input_number << 1) + ch-'0';
        ch = GETCHAR();
    }
    input_number *= sign;
}

inline void open(string a){
    freopen((a+".in").c_str(),"r",stdin);
    freopen((a+".out").c_str(),"w",stdout);
}

inline void fasterios(){
    //Do not use if interactive
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
}

struct dt{
	LL l,r;
	bool operator<(const dt&other)const{
		if(l == other.l) return r < other.r;
		return l < other.l;
	}
};

LL newn;
LL isi[3005];
LL n,m,k,t,ans;
vector <dt> ada;
vector <dt> kosong;
priority_queue <LL> tambah;
LL lokal, ekspres, semiekspres;

int main(){
    fastll(n); fastll(m); fastll(k);
    fastll(lokal); fastll(ekspres); fastll(semiekspres);
    fastll(t);
    k = k-m;
    for(int i = 1;i <= m;i++) cin >> isi[i];
    for(int i = 1;i <= m;i++){
    	//travel dari 1 ke ekspress ke i+1, terus pakai local train paling jauh sampai mana
    	LL cur = (isi[i]-1)*ekspres;
    	LL sisa = t-cur;
    	if(sisa < 0) break;
    	// cout << sisa << " " << lokal << endl;
    	sisa /= lokal;
    	LL kanan = min(isi[i]+sisa,n);
    	ada.pb({isi[i],kanan});
    }
    LL lst = 0;
    ada.pb({n+1,n+1});
    for(int i = 0;i < ada.size();i++){
    	if(ada[i].l-lst >= 2){
    		kosong.pb({lst+1,ada[i].l-1});
    		ans += (ada[i].l-(lst+1));
    	}
    	lst = ada[i].r;
    }
    ans = n-ans-1;
    // cout << "current answer is ";
    // cout << ans << endl;
    for(int i = 0;i < kosong.size();i++){
    	// cout << "Computing the segment " << kosong[i].l << " " << kosong[i].r << endl;
    	LL le = 1;
    	LL ri = m;
    	while(le < ri){
    		LL mid = (le+ri+1)>>1;
    		if(isi[mid] > kosong[i].l) ri = mid-1;
    		else le = mid;
    	}
    	LL count = 0;
    	// cout << "Last express station " << isi[le] << endl;
    	LL cost = (isi[le]-1)*ekspres;
    	LL ori = isi[le];
    	while(kosong[i].l <= kosong[i].r){
    		count++;
    		if(count > k) break;
	    	LL now = kosong[i].l;
	    	//put semiekspress here
	    	LL cur = cost+((now-ori)*semiekspres);
	    	// cout << cur << endl;
	    	LL sisa = t-cur;
	    	if(sisa < 0) break;
	    	sisa /= lokal;
	    	LL kanan = now+sisa;
	    	kanan = min(kanan,kosong[i].r);
	    	tambah.push(kanan-kosong[i].l+1);
	    	// cout << "Masukin " << kanan-kosong[i].l+1 << endl;
	    	// cout << kosong[i].l << " " << kosong[i].r << endl;
	    	kosong[i].l = kanan+1;
	    }
    }
   	for(int i = 1;i <= k;i++){
   		if(tambah.empty()) break;
   		ans += tambah.top();
   		tambah.pop();
   	}
   	printf("%lld\n",ans);
    return 0;
}


Measured memory_bytes: 7176