#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
typedef long double ld;
int n,m;
ll son,w,t;
ll su[200023],arr[200023],cost[200023];
int ilk[200023];
ll sum=0;
map<ll,ll>mp;
ll tim;
ll ek=0;
ll ans=0;
ld f(pair<ll,ll>a,pair<ll,ll>b){
return ld(a.sc-b.sc)/ld(b.fr-a.fr);
}
void ekle(pair<ll,ll>p){
if(mp.count(p.fr)){
if(mp[p.fr]>p.sc)return;
}
mp[p.fr]=p.sc;
{
auto a=mp.find(p.fr);
if(a!=mp.begin()){
auto b=a--;
b++;
if(b!=mp.end()){
if(f(p,*b)<f(*a,p)){
mp.erase(p.fr);
return;
}
}
}
}
while(true){
auto b=mp.upper_bound(p.fr);
if(b==mp.end())break;
auto a=b++;
if(b==mp.end())break;
if(f(*a,*b)<f(p,*a)){
mp.erase(a);
}
else break;
}
while(true){
auto a=mp.find(p.fr);
if(a==mp.begin())break;
a--;
if(a==mp.begin())break;
auto b=a--;
if(f(*b,p)<f(*a,*b)){
mp.erase(b);
}
else break;
}
}
void cook(){
while(mp.size()>1){
pair<ll,ll>a=*mp.begin(),b=*(++mp.begin());
if(f(a,b)<=tim){
mp.erase(mp.begin());
}
else break;
}
}
signed main(){
ios_base::sync_with_stdio(23^23);cin.tie(0);
cin>>son>>n>>m>>w>>t;
for(int i=1;i<=n;i++){
cin>>su[i];
}
su[n+1]=son;
for(int i=1;i<=m;i++){
cin>>arr[i]>>cost[i];
}
sort(su+1,su+n+1);
{
vector<pair<ll,ll>>v;
for(int i=1;i<=m;i++){
v.pb({arr[i],cost[i]});
}
sort(v.begin(),v.end());
for(int i=1;i<=m;i++){
arr[i]=v[i-1].fr;
cost[i]=v[i-1].sc;
}
}
sum=(son/t+1)*w;
for(int i=1;i<=m;i++){
sum+=(son/t+((son%t)>arr[i]))*w;
if(son%t>arr[i]){
cost[i]-=w;
}
}
for(int i=1;i<=n+1;i++){
int l=0,r=m;
while(l<r){
int mi=(l+r+1)/2;
if(arr[mi]<(su[i]%t))l=mi;
else r=mi-1;
}
if(l&&!ilk[l])ilk[l]=i;
}
ekle({0,0});
for(tim=m;tim>=1;tim--){
pair<ll,ll>p;
if(ilk[tim]){
ll wi=(son/t)-(su[ilk[tim]]/t);
wi*=w;
p={-wi,ans+wi*(tim+1)};
ekle(p);
}
cook();
ans+=cost[tim];
ek+=cost[tim];
p=*mp.begin();
ans=max(ans,p.sc+p.fr*tim);
}
ans-=ek;
cout<<sum-ans<<endl;
}