#include <bits/stdc++.h>
using namespace std;
const int MAXK = 30;
const int MAXN = 20;
const int MAXS = 1e4;
const int MOD = 3210121;
int fact[2 * MAXS + 1] , inv[2 * MAXS + 1] , mat[MAXN + 1][MAXK + 1] , v[MAXK + 1];
int binpow( int b , int e ) {
int ans = 1;
while( e ) {
if( e & 1 )
ans = 1ll * ans * b % MOD;
b = 1ll * b * b % MOD;
e >>= 1;
}
return ans;
}
void init() {
int i;
fact[0] = 1;
for( i = 1 ; i <= 2 * MAXS ; i++ )
fact[i] = 1ll * fact[i - 1] * i % MOD;
inv[2 * MAXS] = binpow( fact[2 * MAXS] , MOD - 2 );
for( i = 2 * MAXS - 1 ; i >= 0 ; i-- )
inv[i] = 1ll * inv[i + 1] * ( i + 1 ) % MOD;
}
int comb( int n , int k ) {
if( n < 0 || k > n )
return 0;
return 1ll * fact[n] * inv[k] % MOD * inv[n - k] % MOD;
}
int main() {
ifstream cin( "cowfood.in" );
ofstream cout( "cowfood.out" );
int k , s , n , i , l , c , sum , z , j;
cin >> k >> s >> n;
for( l = 1 ; l <= n ; l++ )
for( c = 1 ; c <= k ; c++ )
cin >> mat[l][c];
// fac pinnex
init();
int ans = 0;
ans = comb( s , k );
// cout << s + k << ' ' << k << ' ' << comb( s , k ) << '\n';
//cout << comb( 4 , 2 ) << '\n';
for( i = 1 ; i < ( 1 << n ) ; i++ ) {
for( j = 1 ; j <= k ; j++ )
v[j] = 0;
for( j = 0 ; ( 1 << j ) <= i ; j++ ) {
if( i & ( 1 << j ) )
for( z = 1 ; z <= k ; z++ )
v[z] = max( v[z] , mat[j + 1][z] );
}
sum = 0;
for( j = 1 ; j <= k ; j++ )
sum += v[j];
sum = s - sum;
if( __builtin_popcount( i ) % 2 == 0 ) {
ans += comb( k + sum , k );
//cout << k + sum << ' ' << k << ' ' << comb( k + sum , k ) << '\n';
if( ans < 0 )
ans += MOD;
} else {
ans -= comb( k + sum , k );
//cout << k + sum << ' ' << k << ' ' << comb( k + sum , k ) << '\n';
if( ans >= MOD )
ans -= MOD;
}
}
cout << ans << '\n';
return 0;
}