#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
vector<int> l[1000][1000];
bool isline[1000][1000];
int upoint[1000];
int dpoint[1000];
int min(int a,int b){return a<b?a:b;}
int main(){
	while(1){
	int n,m,h,k;
	int i,j;
	scanf("%d %d %d %d",&n,&m,&h,&k);
	if(n==0)return 0;
	for(i=0;i<n;i++)scanf("%d",&dpoint[i]);
	for(i=0;i<n;i++)for(j=0;j<h;j++)isline[i][j]=false;
	for(i=0;i<m;i++){
		int a,b;
		scanf("%d %d",&a,&b);
		isline[a-1][b]=true;
	}
	int pos;
	for(i=0;i<n;i++){
		pos=i;
		for(j=0;j<h;j++){
			if(isline[pos][j]){
				l[pos][j].push_back(i);
				pos++;
			}
			else if(pos!=0&&isline[pos-1][j]){
				l[pos-1][j].push_back(i);
				pos--;
			}
			if(j==h-1){
				upoint[i]=dpoint[pos];
			}
		}
	}
	int total=upoint[0];
	for(i=1;i<k;i++){
		total+=upoint[i];
	}
	int ans=total;
	for(i=0;i<n;i++){
		for(j=0;j<h;j++){
			if(l[i][j].empty())continue;
			if(l[i][j].front()<k&&l[i][j].back()>=k)ans=min(ans,total+upoint[l[i][j].back()]-upoint[l[i][j].front()]);
			if(l[i][j].front()>=k&&l[i][j].back()<k)ans=min(ans,total+upoint[l[i][j].front()]-upoint[l[i][j].back()]);
		}
	}
	printf("%d\n",ans);
	}
}