#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define eb push_back
#define fi first
#define se second
#define vector2d(x) vector<vector<x>>
#define pii pair<int, int>
#define pl pair<ll, ll>
#define kagamine_len ios_base::sync_with_stdio(0); cin.tie(0);
#define file_in freopen("input.txt", "r", stdin);
#define file_out freopen("output.txt", "w", stdout);
#define all(x) x.begin()+1, x.end()
using namespace std;
/*
g++ -std=c++20 NOI23_Topical.cpp -o output/NOI23_Topical.exe
./output/NOI23_Topical.exe
Input
n -> modules, k -> topics
r1,1, ... r1,k
v -> untuk modul _ perlu knowledge brp di topic _
rn,1, rn,k
u1,1, ... u1,k
v -> knowledge yg didapatkan stlh selesai modul _ untuk topic _
un,1, un,k
*/
ll n, k;
void solve(){
vector r(n+1, vector<ll>(k+1)),
u(n+1, vector<ll>(k+1));
vector lr(k+1, vector<pl>(1));
vector<ll> lst(k+1, 1), rem(n+1, k), cur(k+1, 0);
ll ans = 0;
queue<ll> q;
for (ll i = 1; i <= n; i++){
bool iya = 1;
for (ll j = 1; j <= k; j++){
cin >> r[i][j];
if (r[i][j] != 0) iya = 0;
else {
lst[j]++;
rem[i]--;
}
lr[j].pb({r[i][j], i});
}
if (iya){
q.push(i);
}
}
for (ll i = 1; i <= n; i++){
for (ll j = 1; j <= k; j++){
cin >> u[i][j];
}
}
for (ll i = 1; i <= k; i++){
sort(all(lr[i]));
}
while (!q.empty()){
ll i = q.front();
ans++;
q.pop();
for (ll j = 1; j <= k; j++){
cur[j] += u[i][j];
while (lst[j] <= n && lr[j][lst[j]].fi <= cur[j]){
pl rn = lr[j][lst[j]];
rem[rn.se]--;
if (rem[rn.se] == 0){
q.push(rn.se);
}
lst[j]++;
}
}
}
cout << ans << "\n";
}
int main(){
kagamine_len
cin >> n >> k;
solve();
return 0;
}