#include <bits/stdc++.h>
#define int long long
using namespace std;
const int nmax = 2e4 + 5;
const int mod = 3210121;
int f[nmax], inv[nmax];
int binpow(int b, int e){
int ans = 1;
while(e){
if(e & 1){
ans = ans * b % mod;
}
e >>= 1;
b = b * b % mod;
}
return ans;
}
int v[25][35], ans, n, k, s;
int maxx[35];
int comb(int n, int k){
return f[n] * inv[k] % mod * inv[n - k] % mod;
}
void bkt(int i, int cnt){
if(i == n + 1){
int sum = 0;
for(int j = 1; j <= k; j++){
sum += maxx[j];
}
if(sum > s) return;
int contrib = comb(s - sum + k, k);
if(cnt & 1){
ans -= contrib;
ans = (ans + mod) % mod;
}
else{
ans = (ans + contrib) % mod;
}
return;
}
bkt(i + 1, cnt);
vector<int> cop(k + 1);
for(int j = 1; j <= k; j++){
cop[j] = maxx[j];
maxx[j] = max(maxx[j], v[i][j]);
}
bkt(i + 1, cnt + 1);
for(int j = 1; j <= k; j++)
maxx[j] = cop[j];
}
signed main(){
ifstream cin("cowfood.in");
ofstream cout("cowfood.out");
f[0] = 1;
for(int i = 1; i < nmax; i++) f[i] = f[i - 1] * i % mod;
inv[nmax - 1] = binpow(f[nmax - 1], mod - 2);
for(int i = nmax - 1; i > 0; i--){
inv[i - 1] = inv[i] * i % mod;
}
cin >> k >> s >> n;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= k; j++){
cin >> v[i][j];
}
}
bkt(1, 0);
ans = (ans - 1 - k * s + mod) % mod;
cout << ans << '\n';
return 0;
}