#include <bits/stdc++.h>
#define int long long
int n,k;
int tgain[1000010];
int have[1000010];
std::vector<std::pair<int,int>> req[1000010];
std::vector<std::vector<int>> mgain;
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> k;
mgain.resize(n+2);
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
int creq;std::cin >> creq;
if(creq>0)
req[j].push_back({creq,i});
else
tgain[i]+=1;
}
}
for(int j=1;j<=k;j++){
std::sort(req[j].rbegin(),req[j].rend());
}
for(int i=1;i<=n;i++){
mgain[i].push_back(0);
for(int j=1;j<=k;j++){
int gv;std::cin >> gv;
mgain[i].push_back(gv);
}
}
std::queue<int> q;
for(int i=1;i<=n;i++){
if(tgain[i]==k)q.push(i);
}
int curr=0;
while(!q.empty()){
int learn = q.front();q.pop();
curr+=1;
for(int i=1;i<=k;i++){
have[i]+=mgain[learn][i];
//std::cout << have[i] << ' ';
while(!req[i].empty()&&have[i]>=req[i].back().first){
tgain[req[i].back().second]+=1;
if(tgain[req[i].back().second]==k)q.push(req[i].back().second);
req[i].pop_back();
}
}
//std::cout << '\n';
}
std::cout << curr;
}