
#include<cstdio>
#include<memory.h>
using namespace std;
#define N 305
#define T 2005
#define M 2005
#define min(a,b) ((a)<(b)?(a):(b))
#define min3(a,b,c) (min(a,min(b,c)))
#define min6(a,b,c,d,e,f) (min(min3(a,b,c),min3(d,e,f)))
#define inf 1e9
int n,m,v,e;
int c[T],d[T];
double k[T];
int map[N][N];
double dp[T][M][2];
signed main()
{
scanf("%d%d%d%d",&n,&m,&v,&e);
for(register int i=1;i<=n;++i)
scanf("%d",&c[i]);
for(register int i=1;i<=n;++i)
scanf("%d",&d[i]);
for(register int i=1;i<=n;++i)
scanf("%lf",&k[i]);
memset(map,0x3f,sizeof map);
for(register int i=1;i<=e;++i)
{
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
map[x][y]=min(map[x][y],w);
map[y][x]=min(map[y][x],w);
}
for(register int k=1;k<=n;++k)
for(register int i=1;i<=n;++i)
{
map[i][i]=0;
for(register int j=1;j<=n;++j)
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
}
for(register int i=0;i<=n;++i)
for(register int j=0;j<=m+1;++j)
dp[i][j][0]=dp[i][j][1]=inf;
dp[1][0][0]=0;
for(register int i=1;i<=m+1;++i)
dp[1][i][0]=dp[1][i][1]=0;
for(register int i=2;i<=n;++i)
for(register int j=0;j<=m;++j)
{
dp[i][j][0]=min(
dp[i-1][j][0]+
1.0*map[c[i-1]][c[i]],
dp[i-1][j+1][1]+
k[i-1]*map[d[i-1]][c[i]]+
(1-k[i-1])*map[c[i-1]][c[i]]
);
if(j)
dp[i][j][1]=min(
dp[i-1][j][0]+
k[i]*map[c[i-1]][d[i]]+
(1-k[i])*map[c[i-1]][c[i]],
dp[i-1][j+1][1]+
k[i-1]*k[i]*map[d[i-1]][d[i]]+
k[i-1]*(1-k[i])*map[d[i-1]][c[i]]+
(1-k[i-1])*k[i]*map[c[i-1]][d[i]]+
(1-k[i-1])*(1-k[i])*map[c[i-1]][c[i]]
);
}
double ans=inf;
for(register int i=0;i<=m;++i)
ans=min3(ans,dp[n][i][0],dp[n][i][1]);
printf("%.2lf",ans);
return 0;
}