#include<bits/stdc++.h> #include<atcoder/all> #define chmin(x,y) (x) = min((x),(y)) #define chmax(x,y) (x) = max((x),(y)) #define ld long double using namespace std; using namespace atcoder; using ll = long long; const ll mod = 998244353; using mint = modint998244353; //using Graph = vector<vector<pair<int,int>>>; using Graph = vector<vector<int>>; const vector<int> dx = {1,0,-1,0}, dy = {0,1,0,-1}; ll sqrtll(ll x) { assert(x >= 0); ll hi(x), lo(0); while (hi != lo) { ll y = (hi + lo + 1) / 2; if (y <= x/y) lo = y; else hi = y - 1; } return lo; } int main(){ // input + prep int N,M; cin >> N >> M; vector<ll> X(M),T(N); vector<vector<ll>> C(N,vector<ll>(M)); vector<set<vector<ll>>> st(1<<M); for(int i = 0; i < M; i++) cin >> X[i]; for(int i = 0; i < N; i++){ for(int j = 0; j < M; j++) cin >> C[i][j]; cin >> T[i]; for(int j = 0; j < M; j++) C[i][j] *= T[i]; for(int k = 1; k < (1<<M); k++){ vector<ll> v; for(int j = 0; j < M; j++){ if(k&(1<<j)) v.push_back(C[i][j]); } st[k].insert(v); } } bool can = 0; for(int i = 0; i < N; i++){ // st.erase(C[i]); bool exist = 1; vector<ll> tgt; int bits = (1<<M)-1; for(int j = 0; j < M; i++){ if(T[i] == 100){ if(C[i][j] == X[j]) bits ^= (1<<j); else exist = 0; } else{ ll bns = 100 * (100 * X[j] - C[i][j]); if(bns % (100-T[i]) != 0) exist = 0; else tgt.push_back(bns / (100-T[i])); } if(!exist) break; } if(exist && bits == 0) can = 1; else if(exist){ vector<ll> org; for(int j = 0; j < M; j++) if(bits & (1<<j)){ org.push_back(C[i][j]); } st[bits].erase(org); if(st[bits].count(tgt)) can = 1; st[bits].insert(org); } if(can) break; } // output cout << (can ? "Yes":"No") << endl; }