import array mod = 1000000007 a,b,p = input().split() p = int(p) memo = [[[] for col in range(8)] for row in range(10)] def gen_memo(): global memo for k in range(10) : for sml in range(2) : for mod3 in range(4) : s = (sml<<2)|mod3 nx = [0 for i in range(8)] for d in range(10) : if sml==0 and d>k : continue sml_ = 1 if (d 0 : memo[k][s].append( (s_, nx[s_]) ) def calc(x): sz = len(x) dp = [[[0 for col in range(8)] for row in range(p)] for hoge in range(2)] dp[0][0][0] = 1 u = 0 v = 1 for i in range(sz) : k = ord(x[i]) - ord('0') for j in range(1 if i= mod: dp[v][0][s_] %= mod else: for d in range(10) : if sml==0 and d>k : break sml_ = 1 if (sml==1 or d= mod: dp[v][j_][s_] -= mod u,v = v,u ret = 0 for j in range(p) : if j%p == 0 : continue for sml in range(2) : for mod3 in range(4) : if mod3==0 or mod3==3: s = (sml<<2)|mod3 ret += dp[u][j][s]; ret += -mod if ret>=mod else 0 return ret gen_memo() ans = calc(b) ans = ans - calc(a) ans += mod if ans<0 else 0 def hoge(): global ans mod3__ = 0 modp__ = 0 for i in range(len(a)): k = ord(a[i])-ord('0') mod3__ = 3 if mod3__==3 or k==3 else (mod3__ + k)%3 modp__ = (modp__ * 10 + k) % p if (mod3__==0 or mod3__==3) and modp__ != 0 : ans += 1 ans %= mod hoge() print(ans)