#include <iostream>
#include <iomanip>
using namespace std;
const int N = 300 + 10;
const int maxn = 2000 + 10;
const int inf = 1000;
int n, m, v, e, a[maxn], b[maxn], g[N][N];
double c[maxn], f[maxn][maxn][2];
void chmin(double& a, double b) {a = min(a, b);}
#define W(a, b, x) (x * a + (1 - x) * b)
int main() {
ios::sync_with_stdio(false);
cin >> n >> m >> v >> e;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) cin >> b[i];
for (int i = 1; i <= n; i++) cin >> c[i];
for (int i = 1; i <= v; i++)
for (int j = 1; j <= v; j++)
if (i != j) g[i][j] = inf;
for (int i = 1; i <= e; i++) {
int u, v, w; cin >> u >> v >> w;
g[u][v] = g[v][u] = min(g[u][v], w);
}
for (int k = 1; k <= v; k++)
for (int u = 1; u <= v; u++)
for (int V = 1; V <= v; V++)
g[u][V] = min(g[u][V], g[u][k] + g[k][V]);
for (int i = 1; i <= n; i++)
for (int j = 0; j <= m; j++) {
f[i][j][0] = f[i - 1][j][0] + g[a[i - 1]][a[i]];
chmin(f[i][j][0], f[i - 1][j][1] + W(g[b[i - 1]][a[i]], g[a[i - 1]][a[i]], c[i - 1]));
if (!j) continue;
f[i][j][1] = f[i - 1][j - 1][0] + W(g[a[i - 1]][b[i]], g[a[i - 1]][a[i]], c[i]);
double A = c[i] * c[i - 1], B = c[i - 1] - A, C = c[i] - A, D = 1 - A - B - C;
if (j > 1) chmin(f[i][j][1], f[i - 1][j - 1][1] + A * g[b[i - 1]][b[i]] + B * g[b[i - 1]][a[i]] + C * g[a[i - 1]][b[i]] + D * g[a[i - 1]][a[i]]);
}
double ans = 1e100;
for (int i = 0; i <= m; i++)
for (int j = 0; j < 2; j++)
if (i || !j) chmin(ans, f[n][i][j]);
cout << fixed << setprecision(2) << ans << '\n';
return 0;
}
给个hack也行