package main import ( "fmt" "bufio" "os" "strconv" "strings" ) //var sc = bufio.NewScanner(os.Stdin); var rd = bufio.NewReaderSize(os.Stdin, 1000000); /* func nextInt() int{ sc.Scan(); ret,_ := strconv.Atoi(sc.Text()); return ret; } func nextStr() string{ sc.Scan(); ret := sc.Text(); return ret; } */ var mod int64 = 1000000007; func calc(x *string, p int) int64{ var dp [2][800][16]int64; dp[0][0][0] = 1; var sz int = len(*x); for i :=0; ik){ break; } var a_ int = a; if(d=sz-5 ){ j_ = (j*10+d)%p; } dp[(i&1)^1][j_][s_] += val; if(dp[(i&1)^1][j_][s_] >= mod){ dp[(i&1)^1][j_][s_] -= mod; } } } } } } } var ret int64 = 0; for j:=1; j= mod){ ret -= mod; } } } } } return ret; } func main(){ //sc.Split(bufio.ScanWords); /* var a string = nextStr(); var b string = nextStr(); var p int = nextInt(); */ in,_,_ := rd.ReadLine(); tmp := strings.Split(string(in), " "); var a, b string = tmp[0], tmp[1]; p,_ := strconv.Atoi(tmp[2]); var ans int64 = 0; ans += calc(&b, p); ans -= calc(&a, p); ans = (ans+mod)%mod; var x,y,z int = 0,0,0; for i:=0; i