#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long a[1005], f[1005][2][2005][2], n, k;
long long dfs(long long pos, long long lim, long long last, long long flag) {
  if (pos < 0) {
    return flag;
  }
  auto &ans = f[pos][lim][last][flag];
  if (~ans && !lim) return ans;
  ans = 0;
  long long up = lim ? a[pos] : 9;
  for (long long i = 0; i <= up; i++) {
    if (i == 4 || i == 7) {
      ans += dfs(pos - 1, lim && (i == a[pos]), pos, flag || (last - pos <= k));
    } else {
      ans += dfs(pos - 1, lim && (i == a[pos]), last, flag);
    }
    ans %= mod;
  }
  return ans;
}
long long solve(long long flag) {
  string str;
  cin >> str;
  for (long long i = 0; i < str.size(); i++)
    a[str.size() - 1 - i] = str[i] - '0';
  long long res = 0;
  if (flag) {
    set<long long> s;
    for (long long i = 0; i < str.size(); i++)
      if (str[i] == '4' || str[i] == '7') s.insert(i);
    for (auto i : s) {
      auto t = s.upper_bound(i);
      if (t != s.end())
        if (*t - i <= k) res = 1;
    }
  }
  return (dfs(str.size() - 1, 1, str.size() + k, 0) - res + mod) % mod;
}
void group() {
  long long a1 = solve(1);
  long long a2 = solve(0);
  cout << (a2 - a1 + mod) % mod << endl;
}
signed main() {
  ios::sync_with_stdio(false);
  memset(f, -1, sizeof f);
  long long t;
  cin >> t >> k;
  while (t--) group();
}
