Pagini recente » Cod sursa (job #3219884) | Cod sursa (job #1789668) | Cod sursa (job #2396877) | Cod sursa (job #2654054) | Cod sursa (job #1000240)
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int mod=3210121;
int f[20][31];
int p[31];
int pw(int x,int y)
{
int r;
for(r=1;y;y>>=1)
{
if(y&1) r=(1LL*r*x)%mod;
x=(1LL*x*x)%mod;
}
return r;
}
int invmod(int x) {return pw(x,mod-2);}
int fact[10005];
int C(int n,int k)
{
int ans=fact[n];
ans=(1LL*ans*invmod(fact[k]))%mod;
ans=(1LL*ans*invmod(fact[n-k]))%mod;
return ans;
}
int ans,n,k,s,d[10005];
int V[25][35];
void backt(int p,int semn)
{
if(p==n+1)
{
//for(int i=1;i<=k;i++)
// fprintf(stderr,"%d ",V[nod-1][i]);
//fprintf(stderr,"\n");
int sum=s;
for(int i=1;i<=k;i++)
sum-=V[n][i];
if(sum>=0)
ans=(ans+semn*d[sum]+mod)%mod;
return;
}
for(int i=1;i<=k;i++)
V[p][i]=V[p-1][i];
backt(p+1,semn);
for(int i=1;i<=k;i++)
V[p][i]=max(V[p-1][i],f[p][i]);
backt(p+1,-semn);
}
int main()
{
freopen("cowfood.in","r",stdin);
freopen("cowfood.out","w",stdout);
scanf("%d%d%d",&k,&s,&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=k;j++)
scanf("%d",&f[i][j]);
fact[0]=1;
for(int i=1;i<=s+k-1;i++)
fact[i]=(1LL*fact[i-1]*i)%mod;
d[0]=1;
for(int i=1;i<=s;i++)
d[i]=(C(i+k-1,k-1)+d[i-1])%mod;
backt(1,1);
printf("%d\n",(ans-s*k-1+mod)%mod);
return 0;
}