import java.util.*;
import java.lang.*;
import java.io.*;
class Codechef
{
{
// your code goes here
Scanner sc
=new Scanner
(System.
in); int t=sc.nextInt();
while(t-->0){
long l=sc.nextLong();
long r=sc.nextLong();
int mod=sc.nextInt();
int k=sc.nextInt();
System.
out.
println(solve
(r,mod,k
)-solve
(l
-1,mod,k
)); }
}
public static int solve(long num,int mod,int k){
int [][][] dp=new int[19][mod][10]; //---> 10^18 so 19
for (int i=0;i<=9;i++){
dp[1][i%mod][i]=1;
}
for (int i=2;i<=18;i++){
for (int j=0;j<mod;j++){
for (int m=0;m<=9;m++){
int rem=(j-m)%mod;
if(rem<0)rem+=mod;
for (int l=0;l<=9;l++) {
dp[i][j][m]+=dp[i-1][rem][l];
}
}
}
}
int cnt=0;
for (int i=1;i<s.length();i++){
for (int j=1;j<=9;j++){
cnt+=dp[i][k][j];
}
}
int [] d=new int[s.length()];
for(int i=0;i<s.length();i++){
d[i]=s.charAt(i)-'0';
}
int psum=0;
int len=s.length();
for (int i=0;i<len;i++){
int dig=s.charAt(i)-'0';
int rem=len-i;
int start = (i == 0) ? 1 : 0;
for (int j=start;j<dig;j++){
int n=(k-psum)%mod;
if (n<0)n+=mod;
cnt+=dp[rem][n][j];
}
psum=(psum+dig)%mod;
}
if(psum%mod==k)cnt+=1;
return cnt;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBDb2RlY2hlZgp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgkJU2Nhbm5lciBzYz1uZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwoJCWludCB0PXNjLm5leHRJbnQoKTsKCQl3aGlsZSh0LS0+MCl7CgkJICAgIGxvbmcgbD1zYy5uZXh0TG9uZygpOwoJCSAgICBsb25nIHI9c2MubmV4dExvbmcoKTsKCQkgICAgaW50IG1vZD1zYy5uZXh0SW50KCk7CgkJICAgIGludCBrPXNjLm5leHRJbnQoKTsKCQkgICAgU3lzdGVtLm91dC5wcmludGxuKHNvbHZlKHIsbW9kLGspLXNvbHZlKGwtMSxtb2QsaykpOwoJCX0KCX0KCXB1YmxpYyBzdGF0aWMgaW50IHNvbHZlKGxvbmcgbnVtLGludCBtb2QsaW50IGspewoJICAgIGludCBbXVtdW10gZHA9bmV3IGludFsxOV1bbW9kXVsxMF07ICAvLy0tLT4gMTBeMTggc28gMTkKICAgICAgICBmb3IgKGludCBpPTA7aTw9OTtpKyspewogICAgICAgICAgICBkcFsxXVtpJW1vZF1baV09MTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaT0yO2k8PTE4O2krKyl7IAogICAgICAgICAgICBmb3IgKGludCBqPTA7ajxtb2Q7aisrKXsKICAgICAgICAgICAgICAgIGZvciAoaW50IG09MDttPD05O20rKyl7CiAgICAgICAgICAgICAgICAgICAgaW50IHJlbT0oai1tKSVtb2Q7CiAgICAgICAgICAgICAgICAgICAgaWYocmVtPDApcmVtKz1tb2Q7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgbD0wO2w8PTk7bCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwW2ldW2pdW21dKz1kcFtpLTFdW3JlbV1bbF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoJICAgIGludCBjbnQ9MDsKCSAgICBTdHJpbmcgcz1TdHJpbmcudmFsdWVPZihudW0pOwoJICAgIGZvciAoaW50IGk9MTtpPHMubGVuZ3RoKCk7aSsrKXsKICAgICAgICAgICAgZm9yIChpbnQgaj0xO2o8PTk7aisrKXsKICAgICAgICAgICAgICAgIGNudCs9ZHBbaV1ba11bal07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaW50IFtdIGQ9bmV3IGludFtzLmxlbmd0aCgpXTsKICAgICAgICBmb3IoaW50IGk9MDtpPHMubGVuZ3RoKCk7aSsrKXsKICAgICAgICAgICAgZFtpXT1zLmNoYXJBdChpKS0nMCc7CgkgICAgfQoJICAgIGludCBwc3VtPTA7CgkgICAgaW50IGxlbj1zLmxlbmd0aCgpOwogICAgICAgIGZvciAoaW50IGk9MDtpPGxlbjtpKyspewogICAgICAgICAgICBpbnQgZGlnPXMuY2hhckF0KGkpLScwJzsKICAgICAgICAgICAgaW50IHJlbT1sZW4taTsKICAgICAgICAgICAgaW50IHN0YXJ0ID0gKGkgPT0gMCkgPyAxIDogMDsKICAgICAgICAgICAgZm9yIChpbnQgaj1zdGFydDtqPGRpZztqKyspewogICAgICAgICAgICAgICAgaW50IG49KGstcHN1bSklbW9kOwogICAgICAgICAgICAgICAgaWYgKG48MCluKz1tb2Q7CiAgICAgICAgICAgICAgICBjbnQrPWRwW3JlbV1bbl1bal07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHN1bT0ocHN1bStkaWcpJW1vZDsKICAgICAgICB9CiAgICAgICAgaWYocHN1bSVtb2Q9PWspY250Kz0xOwogICAgICAgIHJldHVybiBjbnQ7Cgl9Cn0=