#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long
#define F(i, l, r) for(int i = l; i <= r; ++i)
#define E(i, l, r) for(int i = l; i >= r; --i)
#define eb emplace_back
const ll mod = 1e9 + 7;
const int ars = 2e5 + 5;
const int ii = 1e9;
const ll il = 1e18;
int n, k;
void solve() {
cin >> n >> k;
vector<vector<int>> r(n + 5), u(n + 5);
F(i, 1, n) r[i].resize(k + 5), u[i].resize(k + 5);
vector<int> p(k + 5, 0);
vector<bool> used(n + 5, 0);
F(i, 1, n) F(j, 1, k) cin >> r[i][j];
F(i, 1, n) F(j, 1, k) cin >> u[i][j];
if(k == 1) {
multiset<pair<int, int>> s;
F(i, 1, n) s.insert({r[i][1], u[i][1]});
int p = 0, res = 0;
for(auto [u, v] : s) {
if(p >= u) {
++res;
p += v;
}
}
cout << res;
exit(0);
}
bool foundlast = 1;
while(foundlast) {
foundlast = 0;
F(i, 1, n) {
if(used[i]) continue;
bool okthis = 1;
F(j, 1, k) {
if(r[i][j] > p[j]) {
okthis = 0; break;
}
}
if(!okthis) continue;
else {
F(j, 1, k) {
p[j] += u[i][j];
}
used[i] = 1;
foundlast = 1;
}
}
}
int res = 0;
F(i, 1, n) if(used[i]) ++res;
cout << res;
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while(t--) solve();
return 0;
}