错误样例I:(测试点#1)
#include<bits/stdc++.h>
#define fileio(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
#define int long long
using namespace std;
namespace FastIO {
inline int read() {
int x=0;char ch=getchar();bool ty=1;
while(ch<'0'||ch>'9') {
if(ch=='-') ty=0;
ch=getchar();
}
while(ch<='9'&&ch>='0') {
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return ty?x:-x;
}
void Wtt(int x) {
if(x>9)
Wtt(x/10);
putchar(x%10+48);
}
void pt(int x) {
if(x>0) Wtt(x);
else if(x<0) putchar('-') ,Wtt(-x);
else putchar('0');
}
}
using namespace FastIO;
const int inf = 1e18;
const int N = 100100 ;
const int M = 1001001 ;
int n,m;
int val[M<<1],to[M<<1],nxt[M<<1],h[N],now[N],Cntedge=1,dep[N];
void ade(int u,int v,int w) {
Cntedge++;
val[Cntedge]=w;
to[Cntedge]=v;
nxt[Cntedge]=h[u];
h[u]=Cntedge;
Cntedge++;
val[Cntedge]=0;
to[Cntedge]=u;
nxt[Cntedge]=h[v];
h[v]=Cntedge;
}
int s,t,SS,TT,more[N];
void edge(int u,int v,int l,int r) {
more[u]-=l,more[v]+=l;
ade(u,v,r-l);
}
queue<int> Q;
// Dinic Start
bool bfs(int s,int t) {
for(int i=0;i<N;i++) dep[i]=inf;
while(!Q.empty()) Q.pop();
Q.push(s);
dep[s]=1,now[s]=h[s];
while(!Q.empty()) {
int u=Q.front();Q.pop();
for(int i=h[u];i;i=nxt[i]) {
int v=to[i];
if(val[i]>0&&dep[v]==inf) {
dep[v]=dep[u]+1;
now[v]=h[v];
Q.push(v);
}
}
}
return dep[t]!=inf;
}
int dfs(int u,int t,int flow) {
if(u==t) return flow;
int res=0,tmp;
for(int i=now[u];i&&flow;i=nxt[i]) {
int v=to[i];
if(dep[v]==dep[u]+1&&val[i]>0) {
now[u]=i;
tmp=dfs(v,t,min(flow,val[i]));
if(tmp==0) dep[v]=inf;
val[i]-=tmp;
val[i^1]+=tmp;
res+=tmp;
flow-=tmp;
}
}
return res;
}
int dnic(int s,int t) {
int answer=0;
while(bfs(s,t))
answer+=dfs(s,t,inf);
return answer;
}
// Dinic End
signed main() {
// fileio("P5192_1");
while(~scanf("%lld%lld",&n,&m))
{
memset(more,0,sizeof(more));
s=n+m+1,t=n+m+2,SS=s,TT=t;
for(int i=1,g;i<=m;i++) {
g=read();
edge(i+n,t,g,inf);
}
for(int k=1,nn,man,leas,mos,D;k<=n;k++)
{
nn=read(),D=read();
edge(s,k,0,D);
for(int i=1;i<=nn;i++)
{
int th=read()+1,les=read(),mos=read();
edge(k,n+th,les,mos);
}
}
SS=n+m+3,TT=n+m+4;
int num=0;
for(int i=1;i<=n+m+2;i++) {
if(more[i]>0) ade(SS,i,more[i]),num+=more[i];
else if(more[i]<0) ade(i,TT,-more[i]);
}
ade(t,s,inf);
if(dnic(SS,TT)<num)
{
printf("-1\n\n");
continue;
}
int res=val[Cntedge];
val[Cntedge]=val[Cntedge^1]=0;
pt(res+dnic(s,t)),putchar('\n'),putchar('\n');
memset(h,0,sizeof(h)),memset(nxt,0,sizeof(nxt));
memset(val,0,sizeof(val)),memset(to,0,sizeof(to));
Cntedge=1;
}
return 0;
}