#include<stdio.h>
#define Nm 51
#define Mm 300
#define Nodem (Nm*100)
#define min(a,b) ((a)<(b)?(a):(b))
int G[Nodem][Nm],P[Nodem][Nm],F[Nodem][Nm],C[Nodem][Nm];
int D[Nodem],Q[Nodem],Min[Nodem],Pren[Nodem],Prep[Nodem];
int X[Mm],Y[Mm],L[Mm],A[Nm],n,m,a,node,sink;
void read()
{
int i;
freopen("algola.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",A+i);
a+=A[i];
}
for(i=0;i<m;++i)
scanf("%d%d%d",X+i,Y+i,L+i);
}
void insert(int x, int y, int c)
{
F[x][D[x]]=F[y][D[y]]=0;
P[x][D[x]]=D[y];
P[y][D[y]]=D[x];
G[x][D[x]]=y;
G[y][D[y]]=x;
C[x][D[x]++]=c;
C[y][D[y]++]=0;
}
int BFS()
{
int l,r,i,x,y;
Q[l=r=0]=0; Min[0]=a; Pren[0]=-2;
for(i=1;i<node;++i)
Pren[i]=-1;
while(l<=r && Pren[sink]==-1)
{
x=Q[l++];
for(i=0;i<D[x];++i)
{
y=G[x][i];
if(Pren[y]==-1 && F[x][i]<C[x][i])
{
Pren[y]=x; Prep[y]=i;
Min[y]=min(Min[x],C[x][i]-F[x][i]);
Q[++r]=y;
}
}
}
return Pren[sink]!=-1;
}
int solve()
{
int i,j,flow=0;
node=n+1; sink=1;
for(j=1;j<=n;++j)
insert(0,j,A[j]);
for(i=0;;++i)
{
while(BFS())
{
flow+=Min[sink];
j=sink;
while(j)
{
F[Pren[j]][Prep[j]]+=Min[sink];
F[j][P[Pren[j]][Prep[j]]]-=Min[sink];
j=Pren[j];
}
}
if(flow==a)
return i;
node+=n; sink+=n;
for(j=0;j<m;++j)
{
insert(i*n+X[j],(i+1)*n+Y[j],L[j]);
insert(i*n+Y[j],(i+1)*n+X[j],L[j]);
}
for(j=1;j<=n;++j)
insert(i*n+j,(i+1)*n+j,a);
}
}
void write(int ans)
{
freopen("algola.out","w",stdout);
printf("%d\n",ans);
}
int main()
{
read();
write(solve());
return 0;
}