#include<bits/stdc++.h>
#define int long long
#define inf 100000000
using namespace std;
int n,m,v,e;
int c[2001],d[2001];
double k[2001],dp[2001][2001][2],ans,t[301][301];
signed main() {
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 >> k[i];
for(int i=1; i<=e; i++){
for(int j=1; j<=e; j++){
t[i][j]=inf;
}
}
for(int i=1; i<=e; i++) {
int a,b;
double w;
cin >> a >> b >> w;
if(a==b)continue;
t[a][b]=t[b][a]=min(t[a][b],w);
}
for(int q=1; q<=e; q++) {
for(int i=1; i<=e; i++) {
for(int j=1; j<i; j++) {
t[j][i]=t[i][j]=min(t[i][j],t[i][q]+t[q][j]);
}
}
}
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++) {
for(int j=0; j<=min(i,m); j++) {
dp[i][j][0]=min( dp[i-1][j][0] + t[c[i-1]][c[i]] , dp[i-1][j][1] + k[i-1] * t[d[i-1]][c[i]] + (1-k[i]) * t[c[i-1]][c[i]] );
dp[i][j][1]=min( dp[i-1][j-1][0] + k[i] * t[c[i-1]][d[i]] + (1 - k[i]) * t[c[i-1]][c[i]] , dp[i-1][j-1][1] + k[i] * (k[i-1] * t[d[i-1]][d[i]] + (1-k[i-1]) * t[c[i-1]][d[i]]) + (1-k[i]) * (k[i-1] * t[d[i-1]][c[i]] + (1 - k[i-1]) * t[c[i-1]][c[i]]) );
}
}
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;
}
调了半天,样例都过不了