#include<bits/stdc++.h>

using namespace std;
const int MAXN=10005;
int P=1e9+7,d,len;
char k[MAXN];
long long a[MAXN],dp[10005][105];

long long dfs(int pos,int tot,bool lim)
{
//	cout<<pos<<' '<<tot<<' '<<lim<<endl;
	if(pos==len+1)
	{
		if(tot==0)	return 1;
		return 0;
	} 
	if(!lim&&dp[pos][tot]!=-1) return dp[pos][tot];
	
	long long ret=0 ,  up=lim?a[pos]:9  ;
	
	for(int i=0;i<= up  ;++i)
	{
		ret=(ret+dfs(pos+1,(tot+i)%d, lim&&i==a[pos] ))%P;
		
		//(ret+=dfs(pos+1,(tot+i)%d, lim&&i==a[pos] ) )%=P;
	}
	
	if(!lim) dp[pos][tot]=ret;
	return ret;
}

int main()
{
	memset(dp,-1,sizeof(dp));
	scanf("%s",k+1);
	scanf("%d",&d);
	len=strlen(k+1);
	for(int i=1;i<=len;++i)
	{
		a[i]=k[i]-'0';
	}
	
	long long ans=(dfs(1,0,1)-1+P)%P;  
	printf("%lld\n",ans);
	return 0;
}

#include<iostream>
#include<string>
using namespace std;

long long MOD = 1000000007;

int  main(){
    //input
    long long D;
    string S;
    cin >> S;
    cin >> D;
    long long keta=S.length();
    long long N[keta];
    long long i,k, digit;
    long long j;
    for(i=0; i<keta; i++){
        N[i]=(long long)(S[i]-'0');
    }

    //calc
    long long dp[keta][2][D];
    for(i=0; i<keta; i++){
        for(j=0; j<=1; j++){
            for(k=0; k<D; k++){
                dp[i][j][k]=0;
            }
        }
    }
    for(digit=0; digit<10; digit++){
        if(digit<N[0]){
            dp[0][1][digit%D]++; 
        }else if(digit==N[0]){
            dp[0][0][digit%D]++;
        }
    }
    for(i=0; i<keta-1; i++){
        for(j=0; j<=1; j++){
            for(k=0; k<D; k++){
                for(digit=0; digit<(j?10:N[i+1]+1); digit++){
                    dp[i+1][j||(digit<N[i+1])][(k+digit)%D]+=dp[i][j][k];
                    dp[i+1][j||(digit<N[i+1])][(k+digit)%D]%=MOD;
                }
            }
        }
    }

    cout << (dp[keta-1][0][0]+dp[keta-1][1][0]-1+MOD)%MOD << endl;
    system("pause");
    return 0;
}