#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=25;
int k,s,n;
vector<int> v[maxn];
const int mod=3210121;
const int maxs=4e4+5;
int fact[maxs+5];
int inv[maxs+5];
int binpow(int val,int put) {
if (put==0) return 1;
int ans=binpow(val,put/2);
if (put%2==0) return (ans*ans)%mod;
return (ans*ans)%mod*val%mod;
}
int combi(int n,int k) {
//cout<<n<<endl;
//cout<<fact[n]<<" "<<inv[k]<<" " <<inv[n-k]<<endl;
return (fact[n]*inv[k])%mod*inv[n-k]%mod;
}
int stars_and_bars(int n,int k) {
if (n<0) return 0;
return combi(n+k,k)%mod;
}
signed main() {
ifstream cin("cowfood.in");
ofstream cout("cowfood.out");
cin>>k>>s>>n;
fact[0]=1;
for (int i=1;i<=maxs;i++) {
fact[i]=(fact[i-1]*i)%mod;
}
//cout<<fact[s]<<endl;
inv[s]=binpow(fact[maxs],mod-2);
for (int i=maxs-1;i>=0;i--) {
inv[i]=(inv[i+1]*(i+1))%mod;
}
for (int i=0;i<n;i++) {
for (int j=1;j<=k;j++) {
int x;
cin>>x;
v[i].push_back(x);
}
}
int ans=stars_and_bars(s,k)-k*s-1;
//cout<<stars_and_bars(5,2)<<endl;
for (int i=1;i<(1<<n);i++) {
int suma=0;
//cout<<i<<endl;
for (int teta=0;teta<k;teta++) {
int maxi=0;
for (int j=0;j<n;j++) {
if ((1<<j)&i)maxi=max(maxi,v[j][teta]);
}
suma+=maxi;
//cout<<teta<<" "<<maxi<<endl;
if (suma>s)break;
}
if (suma>s)continue;
//cout<<i<<" "<<suma<<endl;
if (__builtin_popcount(i)%2==0) {
//cout<<stars_and_bars(s-suma,k)<<endl;
ans+=stars_and_bars(s-suma,k);
ans%=mod;
}else {
//cout<<stars_and_bars(s-suma,k)<<endl;
ans-=stars_and_bars(s-suma,k);
ans+=mod;
ans%=mod;
}
}
cout<<ans;
return 0;
}