Problem:
Score : 100 points

Problem Statement

Find the number of integers between 1 and K (inclusive) satisfying the following condition, modulo 10^9 + 7:

The sum of the digits in base ten is a multiple of D.

Constraints

All values in input are integers.

1 \leq K < 10^{10000}

1 \leq D \leq 100

Input

Input is given from Standard Input in the following format:

K
D

Output

Print the number of integers satisfying the condition, modulo 10^9 + 7.

Sample Input 1

30
4

Sample Output 1

6

Those six integers are: 4, 8, 13, 17, 22 and 26.

Sample Input 2

1000000009
1

Sample Output 2

2

Be sure to print the number modulo 10^9 + 7.

Sample Input 3

98765432109876543210
58

Sample Output 3

635270834

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Linq;
using System.Collections.Generic;
using static System.Console;
using System.Text;
using System.IO;
using static System.Math;
namespace AtCoder
{
    class Program
    {
        static public long[] Sarray() { return ReadLine().Split().Select(long.Parse).ToArray(); }
        static public List<long> Slist() { return ReadLine().Split().Select(long.Parse).ToList(); }

        static readonly long Mod = 1000000000 + 7;
        static void Main(string[] args)
        {
            var K = ReadLine();
            var D = Sarray()[0];
            var sum = new long[D, 2];
            var t = int.Parse(K[0].ToString()) % D;
            sum[0, 0] = 1;
            for (var i = 1; i < t; ++i)
                sum[i, 0] = 1;
            sum[t, 1] = 1;
            var pretk = t;
            for (var i = 1; i < K.Length; ++i)
            {
                var aftsum = new long[D, 2];
                var tk = int.Parse(K[i].ToString());
                for (var j = 0; j < D; ++j)
                {
                    for (var k = 0; k < 10; ++k)
                    {
                        var mk = (k + j) % D;
                        aftsum[mk, 0] = (aftsum[mk, 0] + sum[j, 0]) % Mod;
                    }
                    for (var k = 0; k < tk; ++k)
                    {
                        var mk = (k + j) % D;
                        aftsum[mk, 0] = (aftsum[mk, 0] + sum[j, 1]) % Mod;
                    }
                }
                aftsum[(tk + pretk) % D, 1] = sum[pretk % D, 1] % Mod;
                pretk = (tk + pretk) % D;
                sum = aftsum;
            }
            WriteLine((sum[0, 0] + sum[0, 1] - 1) % Mod);//0がDに対応。0オンリーを引いておく
        }
    }
}