#include<bits/stdc++.h>
#define fo(i, a, b) for(int i = a; i <= b; i ++)
using namespace std;
const int N = 3e2 + 1;
#define int long double
double n, m, v, e ,c[N], d[N], k[N], f[N][N][2], dep[N][N];
int read () {
int num = 0, fs = 1;
char ch = getchar();
while((ch < '0' || ch > '9') && ch != '-') ch = getchar();
if(ch == '-') fs = - 1, ch = getchar();
while(ch >= '0' && ch <= '9') num = num * 10 + ch - 48, ch = getchar();
return num * fs;
}
signed main () {
int n = read(), m = read(), v = read(), e = read();
fo(i, 1, n) c[i] = read(); fo(i, 1, n) d[i] = read();
fo(i, 1, n) k[i] = read();
fo(i, 1, e) {
int u = read(), v = read(), w = read();
dep[u][v] = w;
}
fo(i, 1, n)
fo(j, 1, n)
dep[i][j] = 1e9;
fo(i, 1, n)
fo(j, 1, n)
fo(k, 1, n)
dep[j][k] = min(dep[j][k], dep[j][i] + dep[i][k]);
fo(i, 1, n)
fo(j, 0, m)
f[i][j][0] = f[i][j][1] = 1e9;
fo(j, 0, m) f[0][j][0] = f[0][j][1] = 0;
fo(i, 1, n)
fo(j, 0, m) {
f[i][j][0] = max(f[i - 1][j][0] + dep[c[i - 1]][c[i]], f[i - 1][j][1] + dep[d[i - 1]][c[i]]);
if(j!=0)
f[i][j][1]=min(f[i-1][j-1][0]+dep[c[i-1]][d[i]]*k[i]+dep[c[i-1]][c[i]]*(1-k[i]),f[i-1][j-1][1]+dep[c[i-1]][c[i]]*(1-k[i-1])*(1-k[i])+dep[c[i-1]][d[i]]*(1-k[i-1])*k[i]+dep[d[i-1]][c[i]]*(1-k[i])*k[i-1]+dep[d[i-1]][d[i]]*k[i-1]*k[i]);
}
int ma = 1e9;
fo(j, 0, m) ma = min(ma,min(f[n][j][0], f[n][j][1]));
cout << ma;
return 0;
}