#include<bits/stdc++.h>
using namespace std;
int bb,num,n,k,m,s,t,a[105],c[105][105]={99999999},d[105][105],minn=99999999;
bool q[105];
void dfs(int aa)
{
if(aa==t&&minn>bb)
{
minn==bb;
return ;
}
if(bb>=minn) return ;
for(int i=1;i<=n;i++)
{
if(q[a[i]]!=1&&c[aa][i]!=99999999)
{
bb+=c[aa][i];
for(int j=1;j<=n;j++)
if(d[a[j]][a[i]]==1||a[j]==a[i]) q[a[j]]=1;
dfs(i);
bb-=c[aa][i];
for(int j=1;j<=n;j++)
if(d[a[j]][a[i]]==1||a[j]==a[i]) q[a[j]]=0;
}
}
}
int main()
{
cin>>n>>k>>m>>s>>t;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=k;i++)
for(int j=1;j<=k;j++)
{
int x;
cin>>x;
d[i][j]=x;
}
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
c[x][y]=min(z,c[x][y]);
c[y][x]=min(z,c[y][x]);
}
q[a[s]]=1;
dfs(s);
if(minn==99999999) cout<<-1<<endl;
else cout<<minn<<endl;
return 0;
}