//uses sysutils,timer;
const rest=3210121;
type sir=array[0..31] of integer;
var a:array[0..25] of sir;
pos:array[0..30,0..10000] of longint;
comb,rez,i,j,k,l,m,n,s,nr,pow:longint;
v,sum:sir;
procedure precalc; inline;
var i,j:longint;
begin
for i:=0 to nr do pos[i,0]:=1;
for i:=0 to s do pos[0,i]:=1;
for i:=1 to nr do
for j:=1 to s do
begin
pos[i,j]:=(pos[i,j-1]+pos[i-1,j]);
if pos[i,j]>=rest then dec(pos[i,j],rest);
end;
end;
procedure back(k,num,sum:longint; v:sir); inline;
var i:longint;
begin
if k=n+1 then
begin
if odd(num) then num:=-1
else num:=1;
inc(rez,pos[nr, s-sum]*num+rest);
while rez>=rest do dec(rez,rest);
end
else
begin
back(k+1,num,sum,v);
for i:=1 to nr do
if a[k,i]>v[i] then
begin
inc(sum, a[k,i]-v[i]);
v[i]:=a[k,i];
end;
if sum<=s then back(k+1,num+1,sum,v);
end;
end;
begin
//start;
assign(input,'cowfood.in'); reset(input);
assign(output,'cowfood.out'); rewrite(output);
read(nr,s,n);
precalc;
for i:=1 to n do
for j:=1 to nr do
begin
read(a[i,j]);
inc(sum[i], a[i,j]);
end;
for i:=1 to n do
for j:=i+1 to n do
if sum[i]<sum[j] then
begin
k:=sum[i]; sum[i]:=sum[j]; sum[j]:=k;
a[0]:=a[i]; a[i]:=a[j]; a[j]:=a[0];
end;
back(1,0,0,v);
rez:=(rez-nr*s+nr*rest-1) mod rest;
writeln(rez);
//scurs;
close(input); close(output);
end.