const fi='';//'qtdivseq.inp'; fo='';//'qtdivseq.out'; ba=1000000007; maxn=1000010; var n,k,m,mAss:longint; a,s:array[0..1000001] of int64; p,ta,r:array[0..1000001] of longint; dau:array[1..1000010] of boolean; res:int64; procedure nhap; var f:text; i:longint; begin assign(f,fi); reset(f); readln(f,n,k); for i:=1 to n do begin read(f,a[i]); a[i]:=a[i]+a[i-1]; end; close(f); end; procedure xl1; var i,j:longint; begin s[k]:=0; for i:=1 to n-1 do if a[i]=0 then inc(s[k]); end; procedure xl; var i,j:longint; begin s[0]:=1; for i:=1 to n-1 do if a[i] mod m=0 then s[a[i] div m]:=(s[a[i] div m]+s[a[i] div m-1]) mod ba; res:=s[k-1]; end; procedure tao; var i,j:longint; begin mass:=0; if s[k]=ta[i]) do begin inc(dem); r[dem]:=ta[i]; j:=ta[i]; while j<=s[k] do begin p[dem]:=p[dem]+s[k] div j; j:=j*ta[i]; end; inc(i); end; res:=1; for i:=1 to dem do begin { p[i]:=p[i]-(k-1) div r[i]; p[i]:=p[i]-(s[k]-k+1) div r[i];} j:=r[i]; while j<=k-1 do begin p[i]:=p[i]-(k-1) div j; j:=j*r[i]; end; j:=r[i]; while j<=s[k]-k+1 do begin p[i]:=p[i]-(s[k]-k+1) div j; j:=j*r[i]; end; for j:=1 to p[i] do res:=(res*r[i]) mod ba; end; end; procedure xuat; var f:text; begin assign(f,fo); rewrite(f); res:=0; if a[n] mod k=0 then begin if a[n]=0 then begin xl1; tao; tinh; end else begin m:=a[n] div k; xl; end; end; write(f,res mod ba); close(f); end; begin nhap; xuat; end.