#include<bits/stdc++.h>
using namespace std;
const int N=2005,E=180005,inf=87654321;
int n,m,v,e;
int w[350][350];
int a[N];
vector<int>ca,fca;
vector<double>lo;
void in(){
scanf("%d%d%d%d",&n,&m,&v,&e);
for(int i=1;i<=v;i++){
for(int j=1;j<=v;j++){
if(i==j) w[i][j]=0;
else w[i][j]=inf;
}
}
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
ca.push_back(x);
}
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
fca.push_back(x);
}
for(int i=1;i<=n;i++){
double x;
scanf("%lf",&x);
lo.push_back(x);
}
for(int i=1;i<=e;i++){
int x,y,ww;
scanf("%d%d%d",&x,&y,&ww);
w[x][y]=w[y][x]=ww;
}
}
void floyed(){
for(int k=1;k<=v;k++){
for(int i=1;i<=v;i++){
for(int j=1;j<=v;j++){
if(w[i][j]>w[i][k]+w[k][j]){
w[i][j]=w[i][k]+w[k][j];
}
}
}
}
}
double det(int x,int y,int z){
return w[x][y]-w[z][y];
}
double ans=987654321.0;
void dfs(int i,int m,double xx){
if(m==0||i==n||xx<=0) {
ans=min(ans,xx);
return;
}
double x=0.0;
if(i==n-1){
x=det(ca[i],ca[i-1],fca[i])*lo[i];
}
else if(i==0){
x=det(ca[i],ca[i+1],fca[i])*lo[i];
}
else
x=(det(ca[i],ca[i+1],fca[i])+det(ca[i],ca[i-1],fca[i]))*lo[i];
if(x>=0&&xx>=x){
int u=ca[i];
ca[i]=fca[i];
dfs(i+1,m-1,xx-x);
ca[i]=u;
}
dfs(i+1,m,xx);
}
void solve(){
floyed();
double x=0.0;
for(int i=1;i<n;i++){
x+=w[ca[i-1]][ca[i]];
}
dfs(0,m,x);
printf("%.2f\n",ans);
}
int main(){
in();
solve();
return 0;
}