#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
const ll N = 2005, V = 305;
int n, m, v, e, c[N], d[N];
double k[N], mp[V][V], dp[N][N][2], ans = 1e18;
void init() {}
void solve() {
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 <= v; ++i) {
for (int j = 1; j <= v; ++j) {
if (i == j) mp[i][j] = 0;
else mp[i][j] = 1e18;
}
}
while (e--) {
int u, v;
double w;
cin >> u >> v >> w;
mp[u][v] = mp[v][u] = min(mp[u][v], w);
}
for (int i = 1; i <= v; ++i) {
for (int j = 1; j <= v; ++j) {
for (int k = 1; k <= v; ++k) mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]);
}
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) dp[i][j][0] = dp[i][j][1] = 1e18;
}
dp[1][0][0] = dp[1][1][1] = 0;
for (int i = 2; i <= n; ++i) {
dp[i][0][0] = dp[i - 1][0][0] + mp[c[i - 1]][c[i]];
for (int j = 1; j <= min(i, m); ++j) {
dp[i][j][0] = min({dp[i][j][0],
dp[i - 1][j][0] +
mp[c[i - 1]][c[i]],
dp[i - 1][j][1] +
mp[c[i - 1]][c[i]] * (1 - k[i - 1]) +
mp[d[i - 1]][c[i]] * k[i - 1]
});
dp[i][j][1] = min({dp[i][j][1],
dp[i - 1][j - 1][0] +
mp[c[i - 1]][c[i]] * (1 - k[i]) +
mp[c[i - 1]][d[i]] * k[i],
dp[i - 1][j - 1][1] +
mp[d[i - 1]][d[i]] * k[i] * k[i - 1] +
mp[d[i - 1]][c[i]] * k[i - 1] * (1 - k[i]) +
mp[c[i - 1]][d[i]] * (1 - k[i - 1]) * k[i] +
mp[c[i - 1]][c[i]] * (1 - k[i - 1]) * (1 - k[i])
});
}
}
for (int i = 0; i <= m; i++) ans = min({ans, dp[n][i][0], dp[n][i][1]});
cout << fixed << setprecision(2) << ans << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int _ = 1;
init();
while (_--) solve();
return 0;
}