#include<bits/stdc++.h>
using namespace std;
const int N=2005;
#define inf 10000000
int c[N][3],d[N],mp[N][N];
double E[N],dp[N][N][2];
int n,m,v,e;
signed main() {
cin>>n>>m>>v>>e;
memset(mp,0x3f,sizeof(mp));
for (int i=1; i<=n; i++) cin>>c[i][0];
for (int i=1; i<=n; i++) cin>>c[i][1];
for (int i=1; i<=n; i++) cin>>E[i];
for (int i=1; i<=e; i++) {
int q,u,w;
cin>>q>>u>>w;
mp[q][u]=mp[u][q]=min(mp[q][u],w);
}
// cout<<endl;
// for (int i=1; i<=v; i++) {
// for (int j=1; j<=v; j++) {
// cout<<mp[i][j]<<' ';
// }
// cout<<endl;
// }
for (int k=1; k<=v; k++) {
for (int i=1; i<=v; i++) {
for (int j=1; j<=v; j++) {
mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
}
}
}
// cout<<endl;
// for (int i=1; i<=v; i++) {
// for (int j=1; j<=v; j++) {
// cout<<mp[i][j]<<' ';
// }
// cout<<endl;
// }
for (int i=1; i<=n; i++) mp[i][i]=mp[i][0]=mp[0][i]=0;
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++) {
dp[i][0][0]=dp[i-1][0][0]+mp[c[i-1][0]][c[i][0]];
for (int j=1; j<=m; j++) {
int c1=c[i-1][0],c2=c[i-1][1],c3=c[i][0],c4=c[i][1];
dp[i][j][0]=min(dp[i][j][0],min(dp[i-1][j][0]+mp[c1][c3],dp[i-1][j][1]+mp[c1][c3]*(1-E[i-1])+mp[c2][c3]*E[i-1]));
dp[i][j][1]=min(dp[i][j][1],min(dp[i-1][j-1][0]+mp[c1][c3]*(1-E[i])+mp[c2][c3]*E[i],dp[i-1][j-1][1]+mp[c2][c4]*E[i]*E[i-1]+mp[c2][c3]*E[i-1]*(1-E[i-1])+mp[c1][c4]*(1-E[i-1])*E[i]+mp[c1][c3]*(1-E[i-1])*(1-E[i])));
}
}
double ans=inf;
for (int i=0;i<=m;i++) ans=min(ans,min(dp[n][i][0],dp[n][i][1]));
printf("%.2lf",ans);
return 0;
}