What is wrong in this recursive solution for Atcoder DP task S - Digit Sum?

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f(c) (ll)(c-'0')
#define IOS ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
const ll mod = 1000000007;

string s; ll d, n;
vector<vector<vector<ll>>> dp;

ll rec(ll level, ll r, ll ff){
    if(level==n) return (r%d==0);
    if(dp[level][r][ff]!=-1) return dp[level][r][ff]; 
    ll ans=0;
    for(ll i=0; i<=(ff)*9 + (1-ff)*f(s[level]); ++i)
        ans += rec(level+1, (10*r+i)%d, ff | (i < f(s[level]))),
        ans %= mod;
    return dp[level][r][ff]=ans;
}
void jarvis(){
    cin >> s >> d;
    n = s.size();
    dp = vector<vector<vector<ll>>>(n, vector<vector<ll>>(d, vector<ll>(2, -1)));
    cout << rec(0, 0, 0) - 1;
}
signed main(){
    IOS
    jarvis();
}