wa疯了qwq
#include<bits/stdc++.h>
using namespace std;
#define bug(x) cout<<#x<<"=="<<x<<endl;
#define ll long long
#define rg register int
inline char gc()
{
static char buf[1000000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
#define gc getchar
inline ll read()
{
char c=gc();
ll su=0,f=1;
for (; c<'0'||c>'9'; c=gc()) if (c=='-') f=-1;
for (; c>='0'&&c<='9'; c=gc()) su=su*10+c-'0';
return su*f;
}
inline void write(ll x)
{
if (x<0)
{
putchar('-');
write(-x);
return;
}
if (x>=10) write(x/10);
putchar(x%10+'0');
}
inline void writesp(ll x)
{
write(x),putchar(' ');
}
inline void writeln(ll x)
{
write(x);
putchar('\n');
}
const ll mod = 1e9+7;
#define P pair<ll,int>
#define PP pair<int,int>
const ll int maxn =3e3+10;
int c[maxn]= {0};
int d[maxn]= {0};
double dis[maxn][maxn] = { 0 };
double dp[maxn][maxn][2]= {0};
double p[maxn]= {0};
#define LL long long
int main()
{
int n,m,v,e;
cin>>n>>m>>v>>e;
for(int i=1; i<=n; i++)
{
cin>>c[i];
}
for(int j=1; j<=n; j++)
{
cin>>d[j];
}
for(int i=1; i<=n; i++)
{
cin>>p[i];
}
for(int i=1; i<=v; i++)
{
for(int j=i+1; j<=v; j++)
{
dis[i][j]=1e9;
dis[j][i]=1e9;
}
}
while(e--)
{
int u,v;
double w;
cin>>u>>v>>w;
dis[u][v]=min(dis[u][v],w);
dis[v][u]=dis[u][v];
}
for(int k=1; k<=v; k++)
{
for(int i=1; i<=v; i++)
{
for(int j=1; j<=v; j++)
{
if(k!=i&&i!=j&&j!=k)
{
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
dp[i][j][0]=dp[i][j][1]=1e9;
}
}
dp[1][1][1]=0;
dp[1][0][0]=0;
for(int i=2; i<=n; i++)
{
for(int j=1; j<=m&&j<=i; j++)
{
double pp=p[i-1]*p[i]*dis[ d[i-1] ][ d[i] ]+\
(1-p[i-1])*p[i]*dis[ c[i-1] ][ d[i] ]+\
(1-p[i-1])*(1-p[i])*dis[c[i-1]][c[i]]+\
p[i-1]*(1-p[i])*dis[ d[i-1] ][ c[i] ];
dp[i][j][1]=min({dp[i][j][1],dp[i-1][j-1][0]+p[i]*dis[c[i-1]][ d[i] ]+(1-p[i])*dis[ c[i-1] ][ c[i] ],\
dp[i-1][j-1][1]+pp});
}
for(int j=0; j<=i&&j<=m; j++)
{
dp[i][j][0]=min({dp[i][j][0],dp[i-1][j][1]+p[i-1]*dis[ d[i-1] ][ c[i] ]+(1-p[i-1])*dis[ c[i-1] ][ c[i] ],dp[i-1][j][0]+dis[ c[i-1] ][ c[i] ]});
}
}
double ans=1e9;
dp[1][1][1]=0;
dp[1][0][0]=0;
for(int i=0;i<=m;i++){
ans=min({ans,dp[n][i][0],dp[n][i][1]});
}
printf("%.6f\n",ans);
}