#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
const double eps=1e-14;
int n;
struct matrix{
double f[202][202];
}c;
void mul(matrix &a,matrix b)//不能用matrix返回,是由于函数返回值太大??????
{
int i,j,k;
memset(c.f,0,sizeof(c.f));
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
if(a.f[i][k]<eps)continue;
for(j=0;j<n;j++)
{
if(b.f[k][j]<eps)continue;
c.f[i][j]+=a.f[i][k]*b.f[k][j];
}
}
}
a=c;
}
matrix pow_mod(matrix a,int b)
{
//cout<<1<<endl;
matrix s;
memset(s.f,0,sizeof(s.f));
for(int i=0;i<n;i++)
s.f[i][i]=1;
while(b)
{
if(b&1)
mul(s,a);
mul(a,a);
b=b>>1;
}
return s;
}
int main()
{
int m;
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
double a[202],p,s;
int i,j,k,x,y;
for(i=0;i<n;i++)
cin>>a[i];
cin>>k;
matrix e;
memset(e.f,0,sizeof(e.f));
while(k--)
{
cin>>x>>y>>p;
e.f[x][y]+=p;
}
for(i=0;i<n;i++)
{
s=0;
for(j=0;j<n;j++)
s+=e.f[i][j];
e.f[i][i]=1-s;
}
e=pow_mod(e,m);
double ans=0;
for(i=0;i<n;i++)
ans+=a[i]*e.f[i][n-1];
printf("%.0lf\n",ans);
}
return 0;
}
/*
矩阵:
f[i][j]表示,从i演化到j的概率,最后f[i][i]表示,i未演化的概率。
简单的矩阵连成就OK了。
*/