/*
dp[i][j][0]->前i个阶段 共申请j次 当前 i状态 换1/不换2
f[][]->0x3f->floyd
memset dp 0x3f
dp[1][0][0]=dp[1][1][1]=0 (期望*道路长(0))
dp[i][j][0]=min(dp[i-1][j][0]+f[ci-1][ci],dp[i-1][j-1][1]+f[di-1][ci]*pi-1+f[ci-1][ci]*(1-pi-1))
dp[i][j][1]=min(dp[i-1][j-1][0]+f[ci-1][ci]*(1-pi)+f[ci-1][di]*(pi), dp[i-1][j-1][1]+f[ci-1][ci]*(1-pi-1)*(1-pi)+f[ci-1][di]*(1-pi-1)*(pi)+f[di-1][ci]*(pi-1)*(1-pi)+f[di-1][di]*(pi-1)*(pi) )
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
//#include<queue>
//#include<vector>
//#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------------\n");
using namespace std;
const int maxn=2e5+10 ;
const int inf=0x3f3f3f3f;
int n,m,v,e;
double p[10001],dp[2001][2001][10],ans=999999999;
int a[2001][2001],c[20001],d[20001],f[2010][2010];
inline double min(double a,double b){
return a<b?a:b;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m>>v>>e;
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n;i++) cin>>d[i];
for(int i=1;i<=n;i++) cin>>p[i];
for(int i=1;i<=v;i++)
for( int j=1;j<i;j++)
f[i][j]=f[j][i]=999999999;
for(int i=1;i<=v;i++) f[i][i]=0;
for(int i=1;i<=e;i++){
int u,v,val;cin>>u>>v>>val;
f[u][v]=f[v][u]=min(f[u][v],val);
}
for(int k=1;k<=v;k++)
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++){
if(f[i][k]+f[k][j]<f[i][j])
f[i][j]=f[j][i]=f[i][k]+f[k][j];
}
for(int i=1;i<=n;i++)
for(int j=0;j<=m;j++)
dp[i][j][0]=dp[i][j][1]=999999999;
dp[1][0][0]=dp[1][1][1]=0;
for(int i=2;i<=n;i++){
for(int j=0;j<=min(m,i);j++){//
dp[i][j][0]=min(dp[i-1][j][0]+f[c[i-1]][c[i]],dp[i-1][j][1]+f[d[i-1]][c[i]]*p[i-1]+f[c[i-1]][c[i]]*(1-p[i-1]));
if(j!=0)
dp[i][j][1]=min(dp[i-1][j-1][0]+f[c[i-1]][d[i]]*p[i]+f[c[i-1]][c[i]]*(1-p[i]),dp[i-1][j-1][1]+f[c[i-1]][c[i]]*(1-p[i-1])*(1-p[i])+f[c[i-1]][d[i]]*(1-p[i-1])*p[i]+f[d[i-1]][c[i]]*(1-p[i])*p[i-1]+f[d[i-1]][d[i]]*p[i-1]*p[i]);
}
}
for(int i=0;i<=m;i++)
ans=min(ans,min(dp[n][i][0],dp[n][i][1]));
printf("%.2lf\n",ans);
return 0;
}