#include<cstdio>
#include<cstring>
#include<iostream>
int n,m,w[15],cnt[15];
int adj[100010][12],mat[12][100010];
bool f[15];
bool dfs(int x)
{
int i,j,v;
for(i=0;i<m;i++)
if(!f[i]&&adj[x][i])
{
f[i]=1;
if(cnt[i]<w[i])
{
mat[i][cnt[i]++]=x;
return true;
}
for(j=0;j<cnt[i];j++)
if(dfs(mat[i][j]))
{
mat[i][j]=x;
return true;
}
}
return false;
}
bool ok()
{
int i;
memset(cnt,0,sizeof(cnt));
for(i=0;i<n;i++)
{
memset(f,0,sizeof(f));
if(!dfs(i))
return false;
}
return true;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&adj[i][j]);
for(j=0;j<m;j++)
scanf("%d",&w[j]);
puts(ok()?"YES":"NO");
}
}
09-14
09-14
09-14
09-14