#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<deque>
#include<stack>
#include<string>
#include<string.h>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#include<stdlib.h>
#include<cassert>
#include<time.h>
#include<bitset>
using namespace std;
const long long mod=1000000007;
const long long inf=mod*mod;
const long long d2=(mod+1)/2;
const long double EPS=1e-10;
const long double PI=acos(-1.0);
int ABS(int a){return max(a,-a);}
long long ABS(long long a){return max(a,-a);}
long double ABS(long double a){return max(a,-a);}
int p[110000];
int q[110000];
long long t[110000];
long long ans[110000];
long long ret;
vector<int>g[110000];
set<pair<long long,int> > S;
long long d;
void DEL(long long a,int b){
set<pair<long long,int> >::iterator it=S.lower_bound(make_pair(a,b));
int same=0;
long long dif1=0;
long long dif2=0;
if(it!=S.begin()){
it--;
dif1=a-(*it).first;
if(dif1==0)same=1;
it++;
}else dif1=inf;
it++;
if(it!=S.end()){
dif2=(*it).first-a;
if(dif2==0)same=1;
}else dif2=inf;
if(1<=dif1-1&&dif1-1<=d)ret-=(dif1-1);
if(1<=dif2-1&&dif2-1<=d)ret-=(dif2-1);
if(1<=dif1+dif2-1&&dif1+dif2-1<=d)ret+=(dif1+dif2-1);
if(!same)ret--;
S.erase(make_pair(a,b));
}
void ADD(long long a,int b){
set<pair<long long,int> >::iterator it=S.lower_bound(make_pair(a,b));
int same=0;
long long dif1=0;
long long dif2=0;
if(it!=S.begin()){
it--;
dif1=a-(*it).first;
if(dif1==0)same=1;
it++;
}else dif1=inf;
if(it!=S.end()){
dif2=(*it).first-a;
if(dif2==0)same=1;
}else dif2=inf;
if(1<=dif1-1&&dif1-1<=d)ret+=(dif1-1);
if(1<=dif2-1&&dif2-1<=d)ret+=(dif2-1);
if(1<=dif1+dif2-1&&dif1+dif2-1<=d)ret-=(dif1+dif2-1);
if(!same)ret++;
S.insert(make_pair(a,b));
}
int main(){
int a,b;
int n,m;
scanf("%d%d%d%d%lld",&a,&b,&n,&m,&d);
for(int i=0;i<n;i++){
scanf("%lld",t+i);t[i]--;
}
for(int i=0;i<m;i++){
scanf("%d%d",p+i,q+i);p[i]--;q[i]--;
g[q[i]].push_back(i);
}
for(int i=0;i<n;i++){
S.insert(make_pair(t[i],-1));
}
for(int i=0;i<m;i++){
S.insert(make_pair((long long)p[i]*b+q[i],q[i]));
}
ret=0;
long long last=-1;
for(set<pair<long long,int> >::iterator it=S.begin();it!=S.end();it++){
if(last!=(*it).first){
ret++;
if(last!=-1){
if((*it).first-last-1<=d)ret+=(*it).first-last-1;
}
last=(*it).first;
}
}
ans[0]=ret;
for(int i=0;i<b-1;i++){
for(int j=0;j<n;j++){
DEL(t[j]+i,-1);
}
for(int j=0;j<n;j++){
ADD(t[j]+i+1,-1);
}
for(int j=0;j<g[i].size();j++){
int at=g[i][j];
long long day=(long long)p[at]*b+q[at];
DEL(day,i);
}
for(int j=0;j<g[i].size();j++){
int at=g[i][j];
long long day=(long long)p[at]*b+q[at];
ADD(day+b,i);
}
//for(set<pair<long long,int> >::iterator it=S.begin();it!=S.end();it++){
// printf("%lld ",(*it).first);
//}
//printf("\n");
ans[i+1]=ret;
}
for(int i=0;i<b;i++)printf("%lld\n",ans[i]);
}