#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define sort stable_sort
#define endl '\n'
const int inf=0x3f3f3f3f;
struct UpDownMaxFlow
{
struct node
{
int nxt,to,cap,flow;
}e[800010];
int head[1510],f[1510],cur[1510],dis[1510],vis[1510],cnt=1,val,limit;
void clear()
{
memset(e,0,sizeof(e));
memset(head,0,sizeof(head));
memset(f,0,sizeof(f));
cnt=1;
}
void add(int u,int v,int w)
{
cnt++; e[cnt]=(node){head[u],v,w,0}; head[u]=cnt;
cnt++; e[cnt]=(node){head[v],u,0,0}; head[v]=cnt;
}
void _add(int u,int v,int up,int down)
{
add(u,v,up-down);
f[u]-=down; f[v]+=down;
}
bool bfs(int s,int t)
{
memset(vis,0,sizeof(vis));
queue<int>q;
dis[s]=1;
q.push(s); vis[s]=1;
while(q.empty()==0)
{
int x=q.front(); q.pop();
cur[x]=head[x];
for(int i=head[x];i!=0;i=e[i].nxt)
{
if(vis[e[i].to]==0&&e[i].cap>e[i].flow&&i<=limit)
{
dis[e[i].to]=dis[x]+1;
q.push(e[i].to); vis[e[i].to]=1;
if(e[i].to==t) return true;
}
}
}
return false;
}
int dfs(int x,int t,int flow)
{
if(x==t) return flow;
int sum=0,tmp;
for(int i=cur[x];i!=0&&sum<flow;i=e[i].nxt)
{
cur[x]=i;
if(dis[e[i].to]==dis[x]+1&&e[i].cap>e[i].flow&&i<=limit)
{
tmp=dfs(e[i].to,t,min(e[i].cap-e[i].flow,flow-sum));
if(tmp==0) dis[e[i].to]=0;
sum+=tmp;
e[i].flow+=tmp; e[i^1].flow-=tmp;
}
}
return sum;
}
int Dinic(int s,int t)
{
int flow=0;
while(bfs(s,t)==true) flow+=dfs(s,t,inf);
return flow;
}
bool check(int n,int s,int t)
{
int _s=n+1,_t=n+2,sum=0,tmp;
_add(t,s,inf,0); tmp=head[t];
for(int i=1;i<=n;i++)
{
if(f[i]>0)
{
sum+=f[i];
add(_s,i,f[i]);
}
if(f[i]<0) add(i,_t,-f[i]);
}
limit=inf; sum-=Dinic(_s,_t);
limit=tmp; val=e[limit].flow;
e[limit].cap=e[limit].flow=e[limit^1].cap=e[limit^1].flow=0;
return sum<=0;
}
int query(int s,int t)
{
return val+Dinic(s,t);
}
}F;
int main()
{
#ifdef Isaac
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
int n,m,s,t,c,d,x,up,down,i,j;
while(cin>>n>>m)
{
F.clear(); s=n+m+1; t=n+m+2;
for(i=1;i<=m;i++)
{
cin>>x;
F._add(n+i,t,inf,x);
}
for(i=1;i<=n;i++)
{
cin>>c>>d;
F._add(s,i,d,0);
for(j=1;j<=c;j++)
{
cin>>x>>down>>up; x++;
F._add(i,n+x,up,down);
}
}
cout<<((F.check(n+m+2,s,t)==true)?F.query(s,t):-1)<<endl<<endl;
}
return 0;
}