#include<stdio.h>
#define INF 0x3fffffff
#define min(a,b) ((a)<(b)? (a):(b))
int def[200][200], f[200][200], rch[200][200];
int c[200];
int main(void)
{
freopen("culture.in","r",stdin);
freopen("culture.out","w",stdout);
int i, j, k, n, e, t1, t2, t3, cul, sta, end;
scanf("%d%d%d%d%d", &n, &cul, &e, &sta, &end);
for (i=1;i<=n;i++) scanf("%d", &c[i]);
for (i=1;i<=cul;i++)
{
for (j=1;j<=cul;j++)
scanf("%d", &def[i][j]);
def[i][i]=1;
}
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (!def[c[i]][c[j]]) rch[j][i]=1;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
f[i][j]=INF;
for (i=1;i<=e;i++)
{
scanf("%d%d%d", &t1, &t2, &t3);
if (rch[t1][t2]) f[t1][t2]=min(f[t1][t2], t3);
if (rch[t2][t1]) f[t2][t1]=min(f[t2][t1], t3);
}
for (k=1;k<=n;k++)
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i!=j && i!=k && j!=k)
if (rch[i][k] && rch[k][j] && rch[i][j])
f[i][j]=min(f[i][j], f[i][k]+ f[k][j]);
if (f[sta][end]==INF) printf("-1\n");
else printf("%d\n", f[sta][end]);
fclose(stdin);
fclose(stdout);
return 0;
}