#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
cin.tie(0)->sync_with_stdio(0);
int n, k, ans=0;
cin >> n >> k;
vector<pair<vector<int>, vector<int>>> modreq;
set<int> s;
vector<int> stat(n+2, 0), cur(k+2, 0);
for(int i=0; i<n; i++) {
vector<int> v;
s.insert(i);
for(int j=1; j<=k; j++) {
int in;
cin >> in;
v.push_back(in);
}
modreq.push_back({v, {}});
}
for(int i=0; i<n; i++) {
vector<int> v;
for(int j=1; j<=k; j++) {
int in;
cin >> in;
v.push_back(in);
}
modreq[i].second = v;
}
sort(modreq.begin(), modreq.end());
queue<int> ord;
for(int i=0; i<n; i++) {
while(stat[i] < k && cur[stat[i]] >= modreq[i].first[stat[i]]) {
stat[i]++;
}
if(stat[i] == k) {
ord.push(i);
ans++;
s.erase(i);
}
}
while(!ord.empty()) {
int cn = ord.front();
ord.pop();
for(int i=0; i<k; i++) cur[i] += modreq[cn].second[i];
vector<int> v;
for(auto idx: s) {
while(stat[idx] < k && cur[stat[idx]] >= modreq[idx].first[stat[idx]]) {
stat[idx]++;
}
if(stat[idx] == k) {
ord.push(idx);
ans++;
v.push_back(idx);
}
}
for(auto i: v) {
s.erase(i);
}
}
cout << ans;
}