#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 2e3 + 1;
const int maxm = 2e3 + 1;
const int maxv = 3e2 + 1;
const int maxe = 9e4 + 1;
const int inf = 1e18;
int n, m, v, e;
int c[maxn];
int d[maxn];
double k[maxn];
int g[maxv][maxv];
double f[maxn][maxm][2];
void input() {
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, u, v, w; i <= e; i++) {
cin >> u >> v >> w;
if (g[u][v]) g[u][v] = g[v][u] = min(g[u][v], w);
else g[u][v] = g[v][u] = w;
}
}
void init() {
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
f[i][j][0] = inf;
f[i][j][1] = inf;
}
}
f[1][0][0] = 0;
f[1][1][1] = 0;
for (int i = 2; i <= n; i++) {
f[i][0][0] = f[i - 1][0][0] + g[c[i - 1]][c[i]];
}
}
void floyd() {
for (int k = 1; k <= v; k++) {
for (int i = 1; i <= v; i++) {
for (int j = 1; j <= v; j++) {
if (i == j) continue;
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
}
}
}
}
void dp() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
f[i][j][0] = min(f[i][j][0], min(
f[i - 1][j][0] + g[c[i - 1]][c[i]],
f[i - 1][j][1] + (1 - k[i - 1]) * g[c[i - 1]][c[i]] + k[i - 1] * g[d[i - 1]][c[i]]
));
f[i][j][1] = min(f[i][j][1], min(
f[i - 1][j - 1][0] + (1 - k[i]) * g[c[i - 1]][c[i]] + k[i] * g[c[i - 1]][d[i]],
f[i - 1][j - 1][1] + k[i - 1] * k[i] * g[d[i - 1]][d[i]] + k[i - 1] * (1 - k[i]) * g[d[i - 1]][c[i]] + (1 - k[i - 1]) * k[i] * g[c[i - 1]][d[i]] + (1 - k[i - 1]) * (1 - k[i]) * g[c[i - 1]][c[i]]
));
}
}
}
void output() {
double ans = inf;
for (int i = 0; i <= m; i++) {
ans = min(ans, min(f[n][i][0], f[n][i][1]));
}
cout << fixed << setprecision(2) << ans << endl;
}
signed main() {
input();
floyd();
init();
dp();
output();
return 0;
}