#include<bits/stdc++.h>
using namespace std ;

// MY TOOLS
#define let long long int
#define async ios_base::sync_with_stdio(false);cin.tie(NULL);

//


int dp[10001][101][2] ;
int mod = 1e9 + 7 ;
void self_add( int &a, int b ){
	a += b ;
	if( a >= mod ) a -= mod ;
}
int SIZE ;
int generate_top_down( string num, int idx, int sum, int D, int bound ){
	if( idx == SIZE ) return ( sum % D == 0 ) ;
	int &check = dp[idx][sum][bound] ;
	if( check != -1 ) return check ;
	int N = ( num[idx]-'0' ) ;
	int up_to = ( bound == 1 ) ? N : 9 ;
	int payload = 0, new_bound ;
	for( int digit = 0 ; digit <= up_to ; digit++ ){
		new_bound = ( digit == N ) ? bound : 0 ;
		self_add( payload, generate_top_down( num, idx+1, (sum+digit)%D, D, new_bound ) ) ; 
	}
	return check = payload ; 
}



// main
// write your code here
int main(){
	async ;
	memset( dp, -1, sizeof(dp) ) ;
	string K ; int D ;
	cin >> K >> D ;
	SIZE = K.size() ;
	int ans = generate_top_down( K, 0, 0, D, 1 ) - 1 ;
	if( ans == -1 ) {
		cout << mod - 1 ;
	}
	else{
		cout << ans ;
	}
    return 0 ;
}

#include <bits/stdc++.h>
using namespace std;
/* typedef */
typedef long long ll;
typedef pair<int, int> pii;
/* constant */
const int mod = 1e+9 + 7;
/* global variables */
/* funciton */
/* main */
int main() {
    string S;
    int D;
    cin >> S >> D;
    vector<int> a(S.size());
    for (int i = 0; i < S.size(); i++) a[i] = S[i] - '0';

    // dp[i][j][0] i桁目まで使って, mod D = j, 現時点でSよりも数字が小さいことが確定している
    // dp[i][j][1] i桁目まで使って, mod D = j, 現時点でSと同じ数字 -> これから同じ or 小さい
    // transition)
    // dp[i+1][j+(num = a[i]) mod D][1] += dp[i][j][1]
    // dp[i+1][j+(num < a[i]) mod D][0] += dp[i][j][1]
    // dp[i+1][j+(0<= num <= 9) mod D][0] += dp[i][j][0]
    // init
    vector<vector<vector<ll>>> dp(a.size() + 1, vector<vector<ll>>(D, vector<ll>(2)));
    dp[0][0][1] = 1;
    // calc
    for (int i = 0; i < a.size(); i++) {
        for (int j = 0; j < D; j++) {
            for (int num = 0; num <= 9; num++) {
                int neJ = (j + num) % D;
                if (num == a[i]) {
                    dp[i+1][neJ][1] += dp[i][j][1];
                    dp[i+1][neJ][1] %= mod;
                }
                if (num < a[i]) {
                    dp[i+1][neJ][0] += dp[i][j][1];
                    dp[i+1][neJ][1] %= mod;
                }
                dp[i+1][neJ][0] += dp[i][j][0];
                dp[i+1][neJ][0] %= mod;
            }
        }
    }
    // ans = (mod D == j)の個数
    // 答えに0が含まれるので-1する
    ll ans = (dp[a.size()][0][1] + dp[a.size()][0][0] - 1 + mod) % mod;
    cout << ans << '\n';
}