#include <bits/stdc++.h>   long long Max(const long long x, const long long y) {     if (x > y) return x;     return y;   }   const long long mo = 1e9 + 7, M = 1005;   char s[M];   long long k, a[M], len, dp[M][M][2];   long long dfs(const long long pos, const long long dis, const bool pd,                 const bool lim) {     if (!pos) return pd;     if (!lim && ~dp[pos][dis][pd]) return dp[pos][dis][pd];     long long res = 0, up = lim ? a[pos] : 9;     for (long long i = 0; i <= up; ++i)       if (i != 4 && i != 7)         res = (res + dfs(pos - 1, Max(dis - 1, 0), pd, lim && i == up)) % mo;       else         res = (res + dfs(pos - 1, k, dis || pd, lim && i == up)) % mo;     if (!lim) dp[pos][dis][pd] = res;     return res;   }   long long check() {     long long last = 0x3f3f3f3f;     for (long long i = len; i; --i)       if (a[i] == 4 || a[i] == 7) {         if (last - i <= k) return 1;         last = i;       }     return 0;   }   signed main() {     memset(dp, -1, sizeof dp);     long long T;     scanf( %lld%lld , &T, &k);     while (T--) {       scanf( %s , s);       len = strlen(s);       for (long long i = 0; i < len; ++i) a[len - i] = s[i] ^ 48;       long long ans = (dfs(len, 0, 0, 1) - check() + mo) % mo;       scanf( %s , s);       len = strlen(s);       for (long long i = 0; i < len; ++i) a[len - i] = s[i] ^ 48;       ans = (dfs(len, 0, 0, 1) - ans + mo) % mo;       printf( %lld n , ans);     }     return 0;   }   