#include<bits/stdc++.h>
using namespace std;
const int maxn=2010,maxv=310;
int dis[maxv][maxv],c[maxn],d[maxn],wc[maxn],wd[maxn];
int n,m,v,e;
double k1[maxn],f[maxn][maxn];
double tot;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=((x<<1)+(x<<3))+c-'0';
c=getchar();
}
return x*f;
}
inline void floyd(){
for(int k=1;k<=e;k++)
for(int i=1;i<=e;i++)
for(int j=1;j<=e;j++)
dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
}
inline void dp(){
for(int k=1;k<=m;k++)
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
f[k][i]=min(f[k-1][j]+k1[i]*dis[c[i-1]][d[i]]+(1-k1[i])*dis[c[i-1]][c[i]],f[k][i]);
}
}
}
inline void Init(){
n=read(),m=read();
v=read(),e=read();
memset(dis,0x3f,sizeof(dis));
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++)c[i]=read();
for(int i=1;i<=n;i++)d[i]=read();
for(int i=1;i<=n;i++)scanf("%lf",&k1[i]),dis[i][i]=0;
for(int i=1;i<=e;i++){
int a,b,w;
a=read(),b=read();
if(a==b)continue;
dis[a][b]=min(dis[a][b],w);
dis[b][a]=dis[a][b];
}
}
inline void Work(){
if(m==0){
floyd();
for(int i=1;i<n;i++)tot+=dis[c[i]][c[i+1]];
}
else{
floyd();
for(int i=1;i<n;i++)tot+=dis[c[i]][c[i+1]];
for(int i=1;i<=n;i++){
wc[i]=wc[i-1]+dis[c[i-1]][c[i]];
wd[i]=wd[i-1]+dis[d[i-1]][d[i]];
f[0][i]=wc[i];
}
dp();
for(int i=0;i<=n;i++){
tot=min(tot,f[i][n]);
}
}
}
inline void Print(){
printf("%.2lf",tot);
}
int main(){
Init();
Work();
Print();
return 0;
}