#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
const int inf=1e18;
struct line{
int m=inf,c;
int y(int x){
if(m==inf)return inf;
return m*x+c;
}
};
struct seg{
int l,r;
seg *lf=0,*rg=0;
line opt;
seg(int x,int y){
l=x,r=y;
}
void update(line baru){
if(opt.m==inf){
opt=baru; return;
}
int mid=(l+r)/2;
if(opt.y(mid)>baru.y(mid))swap(opt,baru);
if(l==r)return;
if(baru.m<opt.m){
if(!rg)rg=new seg(mid+1,r);
rg->update(baru);
}
else{
if(!lf)lf=new seg(l,mid);
lf->update(baru);
}
}
int query(int x){
int brp=opt.y(x);
int mid=(l+r)/2;
if(mid>=x){
if(!lf);
else brp=min(brp,lf->query(x));
}
else{
if(!rg);
else brp=min(brp,rg->query(x));
}
return brp;
}
};
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int x,n,m,w,t;
cin>>x>>n>>m>>w>>t;
int s[n+2];
for(int q=1;q<=n;q++)cin>>s[q];
s[n+1]=x;
sort(s+1,s+n+2);
ii org[m+1];
for(int q=1;q<=m;q++){
cin>>org[q].fir>>org[q].sec;
}
sort(org+1,org+m+1);
int v[m+1],pref[m+1]; pref[0]=0;
for(int q=0;q<=m;q++){
v[q]=0;
if(q>=1)pref[q]=pref[q-1]+org[q].sec;
}
for(int q=n+1;q>=1;q--){
int idx=lower_bound(org+1,org+m+1,make_pair(s[q]%t,0LL))-org-1;
v[idx]=s[q];
}
// for(int q=1;q<=m;q++)cout<<v[q]<<' ';
// cout<<endl;
seg slv(0,1e12);
int ans=0;
int dp[m+1]; dp[0]=0;
slv.update({0,0});
for(int q=1;q<=m;q++){
dp[q]=dp[q-1]+((x-org[q].fir)/t +1)*w;
//cout<<dp[q]<<' ';
if(v[q]!=0){
int brp=slv.query(v[q]/t) + pref[q] + (v[q]/t)*w*q;
dp[q]=min(dp[q],brp);
cout<<brp;
}
//cout<<endl;
slv.update({-q*w,dp[q]-pref[q]});
}
dp[m]+=(x/t)*w; dp[m]+=w;
cout<<dp[m]<<endl;
}
/*
dp[i]=dp[j]+(pref[i]-pref[j])+(i-j)*v[i]*w
m: -j*w
x:v[i]
c:dp[j]-pref[j]
k:pref[i]+i*v[i]*w
*/