#include<bits/stdc++.h>
using namespace std;
double min(double a,double b){
return (a>=b)?b:a;
}
const double up=1000000000;
int main(){
int n,m,v,e;
cin>>n>>m>>v>>e;
int c[n],d[n];
double k[n];
for (int i=0;i<n;i++){
scanf("%d",&c[i]);
}
for (int i=0;i<n;i++){
scanf("%d",&d[i]);
}
for (int i=0;i<n;i++){
scanf("%lf",&k[i]);
}
double floyd[v+1][v+1];
for (int i=1;i<=v;i++)
for (int j=1;j<=v;j++)
floyd[i][j]=(i==j)?0:up;
for (int i=0;i<e;i++){
int a,b;
double w;
scanf("%d%d%lf",&a,&b,&w);
floyd[a][b]=floyd[b][a]=w;
}
//cout<<up<<endl;
for (int j=1;j<=v;j++)
for (int i=1;i<=v;i++)
for (int k=1;k<=v;k++)
floyd[i][k]=min(floyd[i][k],floyd[i][j]+floyd[j][k]);
//for (int i=1;i<=v;i++)
// for (int j=1;j<=v;j++)
// cout<<i<<" "<<j<<" "<<floyd[i][j]<<endl;
double dp[2][m+2][2];
for (int i=0;i<=m;i++)
dp[0][i][1]=dp[0][i][0]=up;
dp[0][0][0]=dp[0][1][1]=0;
for (int i=1;i<n;i++){
for (int j=0;j<=m;j++){
int st1=c[i-1],st2=d[i-1],ed1=c[i],ed2=d[i];
double stk_yes=k[i-1],stk_no=1-k[i-1],edk_yes=k[i],edk_no=1-k[i];
double l11=floyd[st1][ed1];
double l12=floyd[st1][ed2];
double l21=floyd[st2][ed1];
double l22=floyd[st2][ed2];
//不申请
double key1=dp[0][j][0]+l11;
dp[1][j][0]=key1;
if (j>0){
double key2=dp[0][j][1]+stk_yes*l21+stk_no*l11;
dp[1][j][0]=min(dp[1][j][0],key2);
double key3=dp[0][j-1][0]+edk_yes*l12+edk_no*l11;
dp[1][j][1]=key3;
if (j>1){
double key4=dp[0][j-1][1];
key4+=stk_yes*edk_yes*l22;
key4+=stk_yes*edk_no*l21;
key4+=stk_no*edk_yes*l12;
key4+=stk_no*edk_no*l11;
dp[1][j][1]=min(dp[1][j][1],key4);
}
/*dp[1][j][0]=min(dp[1][j][0],dp[0][j-1][1]+k[i]*(floyd[c[i-1]][c[i]])+(1-k[i])*(floyd[d[i-1]][c[i]]));
//申请
dp[1][j][1]=min(dp[0][j-1][0]+(1-k[i])*floyd[c[i-1]][c[i]]+k[i]*floyd[c[i-1]][d[i]],
dp[0][j-1][1]+k[i-1]*k[i]*floyd[d[i-1]][d[i]]+k[i-1]*(1-k[i])*floyd[d[i-1]][c[i]]
+(1-k[i-1])*k[i]*floyd[c[i-1]][d[i]]+(1-k[i-1])*(1-k[i])*floyd[c[i-1]][c[i]]);
*/
}
else{
dp[1][j][1]=up;
}
}
for (int j=0;j<=m;j++){
dp[0][j][0]=dp[1][j][0];
dp[0][j][1]=dp[1][j][1];
}
}
double ans=up;
for (int i=0;i<=m;i++){
ans=min(ans,dp[0][i][0]);
ans=min(ans,dp[0][i][1]);
}
printf("%0.2f\n",ans);
return 0;
}