#include<bits/stdc++.h>
using namespace std;
const int maxn=2010;
const double inf=1<<17;
int n,m,v,e;
int a[maxn][2];
int f[310][310];
double k[maxn],dp[maxn][maxn][2];
void Floyd()
{
for(int i=1;i<=v;i++) f[i][i]=0;
for(int k=1;k<=v;k++)
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
}
int main()
{
int x,y,w;
memset(f,0x3f,sizeof(f));
scanf("%d %d %d %d",&n,&m,&v,&e);
for(int i=1;i<=n;i++) scanf("%d",&a[i][0]);
for(int i=1;i<=n;i++) scanf("%d",&a[i][1]);
for(int i=1;i<=n;i++) scanf("%lf",&k[i]);
for(int i=1;i<=e;i++)
{
scanf("%d %d %d",&x,&y,&w);
f[x][y]=f[y][x]=min(f[x][y],w);
}
Floyd();
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
dp[i][j][0]=dp[i][j][1]=inf;
dp[1][0][0]=dp[1][1][1]=0;
for(int i=2;i<=n;i++)
{
int C1=a[i-1][0],C2=a[i-1][1],C3=a[i][0],C4=a[i][1];
dp[i][0][0]=dp[i-1][0][0]+f[C1][C3];
for(int j=1;j<=min(i,m);j++)
{
dp[i][j][0]=min(dp[i][j][0],min(dp[i-1][j][0]+f[C1][C3],dp[i-1][j][1]+(1-k[i-1])*f[C1][C3]+k[i-1]*f[C2][C3]));
dp[i][j][1]=min(dp[i][j][1],dp[i-1][j-1][0]+k[i]*f[C1][C4]+(1-k[i])*f[C1][C3]);
dp[i][j][1]=min(dp[i][j][1],dp[i-1][j-1][1]+(1-k[i-1])*(1-k[i])*f[C1][C3]+k[i-1]*(1-k[i])*f[C2][C3]+(1-k[i-1])*k[i]*f[C1][C4]+k[i-1]*k[i]*f[C2][C4]);
}
}
double ans=inf;
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;
}