using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; class TEST{ static void Main(){ Sol mySol =new Sol(); mySol.Solve(); } } class Sol{ public void Solve(){ int N=S.Length; int[] dp=new int[32768]; int mod=(int)1e9+7; int[] nxt=new int[32768]; int m10=10%mod; var ca=S.ToCharArray(); foreach(var c in ca){ for(int j=0;j=M)nk-=M; nxt[nk]+=dp[j];if(nxt[nk]>=mod)nxt[nk]-=mod; } if(nc!=0){ while(nc>=M)nc-=M; nxt[nc]+=1;if(nxt[nc]>=mod)nxt[nc]-=mod; } Swap(ref dp,ref nxt); } int zero=S.Count(x=>x=='0'); Console.WriteLine((dp[0]+zero)%mod); } void Swap(ref T a,ref T b){ var tmp=a;a=b;b=tmp; } String S; int M; public Sol(){ S=rs(); M=ri(); } static String rs(){return Console.ReadLine();} static int ri(){return int.Parse(Console.ReadLine());} static long rl(){return long.Parse(Console.ReadLine());} static double rd(){return double.Parse(Console.ReadLine());} static String[] rsa(char sep=' '){return Console.ReadLine().Split(sep);} static int[] ria(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>int.Parse(e));} static long[] rla(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>long.Parse(e));} static double[] rda(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>double.Parse(e));} }