/*
    题意:N种物种,有初始个数  T种转化过程 a b c表示每一次转化,将有a*c转变为b
          问经过M次转化后,最后编号N-1的物种的个数   rounded-to 四舍五入
          构造转化矩阵A
          (num[0],num[1],num[N-1])*A = 结果
          A[a][a]-=c;
          A[a][b]+=c;
          A初始为单位矩阵
*/

#include
<cstdio>
#include
<cstring>
#include
<algorithm>
using namespace std;

const int MAXN = 201;
const double eps = 1e-15;//题目100,000,000,所以*1e-8就为1了
int N,M;
double num[201];
double A[MAXN][MAXN],z[MAXN][MAXN];

void mul(double A[][MAXN],double B[][MAXN])//A=A*B  
{
    
//直接开个数组,然后赋值更简单!
    double R[MAXN][MAXN];
    memset(R,
0,sizeof(R));
    
for(int k=0;k<N;k++)
        
for(int i=0;i<N;i++)
            
if(A[i][k]>eps)//
                for(int j=0;j<N;j++)
                    R[i][j]
+=A[i][k]*B[k][j];
    
for(int i=0;i<N;i++)
        
for(int j=0;j<N;j++)
            A[i][j]
=R[i][j];
}

/*
    这种递归的应该比那种非递归的快
*/

void power(double m[][MAXN],int n)
{
    
if(n==1)
    
{
        
for(int i=0;i<N;i++)
            
for(int j=0;j<N;j++)
                m[i][j]
=A[i][j];
        
return ;
    }

    power(m,n
/2);
    mul(m,m);
    
if(n&1)mul(m,A);
}

int main()
{
    
//freopen("in","r",stdin);
    while(scanf("%d%d",&N,&M),N||M)
    
{
        
for(int i=0;i<N;i++)
            scanf(
"%lf",&num[i]);
        
for(int i=0;i<N;i++)
            
for(int j=0;j<N;j++)
                A[i][j]
=(i==j);
        
int T;
        scanf(
"%d",&T);
        
while(T--)
        
{
            
int a,b;
            
double c;
            scanf(
"%d%d%lf",&a,&b,&c);
            A[a][a]
-=c;
            A[a][b]
+=c;
        }

        power(z,M);
        
double ans = 0;
        
for(int i=0;i<N;i++)
            ans
+=num[i]*z[i][N-1];
        printf(
"%.0f\n",ans);
    }

    
return 0;
}