#include <bits/stdc++.h>   using namespace std;   const int MOD = 1e9 + 7;   const int N = 1010;   int dp[N][N][2];   int bits[N];   int t, k;   long long dfs(int len, int pos, int num, bool mark) {     int maxx;     long long sum;     if (!len) {       if (num == 1) {         return true;       } else {         return false;       }     }     if (!mark && dp[len][pos][num] != -1) {       return dp[len][pos][num];     }     if (mark) {       maxx = bits[len];     } else {       maxx = 9;     }     sum = 0;     for (int i = 0; i <= maxx; i++) {       if (i == 4 || i == 7) {         sum +=             dfs(len - 1, len, (pos && pos - len <= k) | num, mark && i == maxx);       } else {         sum += dfs(len - 1, pos, num, mark && i == maxx);       }     }     sum %= MOD;     if (!mark) {       dp[len][pos][num] = sum;     }     return sum;   }   long long f(string s) {     int len;     len = 0;     for (int i = s.size() - 1; i >= 0; i--) {       len++;       bits[len] = s[i] -  0 ;     }     return dfs(len, 0, 0, 1);   }   bool check(string &s) {     int p;     p = 0;     for (int i = 1; i <= s.size(); i++) {       if (s[i - 1] ==  4  || s[i - 1] ==  7 ) {         if (!p || i - p > k) {           p = i;         } else if (i - p <= k) {           return true;         }       }     }     return false;   }   int main() {     string l, r;     long long ans;     while (scanf( %d%d , &t, &k) == 2) {       memset(dp, -1, sizeof(dp));       for (int i = 0; i < t; i++) {         cin >> l >> r;         ans = f(r) - f(l) + (check(l) ? 1 : 0);         printf( %lld n , (ans % MOD + MOD) % MOD);       }     }     return 0;   }   