#include<iostream>
#include<iomanip>
using namespace std;
const int N = 1e3 * 2 + 10, M = 1e2 * 3 + 10, inf = 1e9;
int n, m, u, e, c[N], d[N], f[M][M], a, b, w;
double k[N], g[N][N][2], ans = inf;
int main(){
for(int i = 0; i < M; i++){
for(int j = 0; j < M; j++){
f[i][j] = inf;
}
f[i][i] = 0;
}
cin >> n >> m >> u >> 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 = 0; i < e; i++){
cin >> a >> b >> w;
f[a][b] = min(f[a][b], w);
f[b][a] = f[a][b];
}
for(int l = 1; l <= u; l++){
for(int i = 1; i <= u; i++){
for(int j = 1; j <= u; j++){
f[i][j] = min(f[i][j], f[i][l] + f[l][j]);
}
}
}
for(int i = 1; i <= n; i++){
for(int j = 0; j <= m; j++){
g[i][j][0] = g[i][j][1] = inf;
}
}
g[1][0][0] = g[1][1][1] = 0;
for(int i = 2; i <= n; i++){
for(int j = 0; j <= min(m, i); j++){
int c1 = c[i], c2 = c[i-1], d1 = d[i], d2 = d[i-1];
double k1 = k[i], k2 = k[i-1];
g[i][j][0] = min(g[i-1][j][1] + k2 * f[d2][c1] + (1-k2) * f[c2][c1], g[i-1][j][0] + f[c2][c1]);
if(j > 0){
g[i][j][1] = min(g[i-1][j-1][1] + k2 * k1 * f[d2][d1] + k2 * (1-k1) * f[d2][c1] + (1-k2) * k1 * f[c2][d1] + (1-k2) * (1-k1) * f[c2][d1],
g[i-1][j-1][0] + k1 * f[c2][d1] + (1-k1) * f[c2][c1]);
}
}
}
for(int i = 0; i <= m; i++){
ans = min(ans, min(g[n][i][0], g[n][i][1]));
}
cout << fixed << setprecision(2) << ans;
return 0;
}