76pts WA
#include <stdio.h>
#include <string.h>
#include <vector>
inline int read() {
int x = 0; bool w = 1; char c = getchar();
for (; c < '0' || c > '9'; c = getchar()) if (c == '-') w ^= 1;
for (; c >= '0' && c <= '9'; c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
return w ? x : -x;
}
inline double mn(double p, double q) {
return p < q ? p : q;
}
const int N = 2005;
int n, m, V, E, c[N][2];
int g[305][305];
double k[N], f[N][N][2];
const double inf = 1e17;
int main(void) {
n = read(), m = read(), V = read(), E = read();
for (int i = 1; i <= n; ++i) c[i][0] = read();
for (int i = 1; i <= n; ++i) c[i][1] = read();
for (int i = 1; i <= n; ++i) scanf("%lf", &k[i]);
memset(g, 63, sizeof g);
for (int i = 1; i <= V; ++i) g[i][0] = g[0][i] = g[i][i] = 0;
for (int i = 1, u, v, w; i <= E; ++i) {
u = read(), v = read(), w = read();
g[u][v] = g[v][u] = mn(g[u][v], w);
}
for (int k = 1; k <= V; ++k)
for (int i = 1; i <= V; ++i)
for (int j = 1; j <= V; ++j)
g[i][j] = mn(g[i][k] + g[k][j], g[i][j]);
for (int i = 0; i <= n; ++i)
for (int j = 0; j <= m; ++j)
f[i][j][0] = f[i][j][1] = inf;
f[1][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][0]][c[i][0]];
for (int j = 1; j <= i && j <= m; ++j) {
f[i][j][0] = mn(f[i][j][0], mn(f[i - 1][j][0] + g[c[i - 1][0]][c[i][0]], f[i - 1][j][1] + g[c[i - 1][0]][c[i][0]] * (1 - k[i - 1]) + g[c[i - 1][1]][c[i][0]] * k[i - 1]));
f[i][j][1] = mn(f[i][j][1], mn(f[i - 1][j - 1][0] + g[c[i - 1][0]][c[i][0]] * (1 - k[i]) + g[c[i - 1][0]][c[i][1]] * k[i], f[i - 1][j - 1][1] + g[c[i - 1][1]][c[i][1]] * k[i - 1] * k[i] + g[c[i - 1][1]][c[i][0]] * k[i - 1] * (1 - k[i]) + g[c[i - 1][0]][c[i][1]] * (1 - k[i - 1]) * k[i] + g[c[i - 1][0]][c[i][0]] * (1 - k[i - 1] * (1 - k[i]))));
}
}
double ans = inf;
for (int j = 0; j <= m; ++j)
ans = mn(ans, mn(f[n][j][0], f[n][j][1]));
printf("%.2lf\n", ans);
return 0;
}