#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<vector>usingnamespace std;constint N =11, M =100;int P;int f[N][N][M];// i位数,最高位是j,i位之和模P的余数是k//返回正数intmod(int a){return(a % P + P)% P;}voidinit(){memset(f,0,sizeof f);for(int i =0; i <=9; i++) f[1][i][i % P]++;for(int i =2; i < N; i++){//位数for(int j =0; j <=9; j++){//最高位for(int k =0; k < P; k++){//余数for(int t =0; t <=9; t++){//次高位
f[i][j][k]+= f[i -1][t][mod(k - j)];}}}}}intdp(int n){while(!n)return1;
vector<int> nums;while(n) nums.push_back(n %10), n /=10;int res =0;int last =0;//记录前几位的和for(int i = nums.size()-1; i >=0; i--){//左分支int x = nums[i];for(int j =0; j < x; j++){
res += f[i +1][j][mod(-last)];}
last += x;//右分支if(!i && last % P ==0) res++;//特判}return res;}intmain(){int l, r;while(cin >> l >> r >> P){init();
cout <<dp(r)-dp(l -1)<< endl;}return0;}