#include <bits/stdc++.h>
using namespace std;
constexpr int N = 1000, MOD = 1e9 + 7;
string l, r;
int k;
int dp[N + 1][N + 1][2];
int dfs(int len, int d, bool need, bool top, const string &s) {
  if (len < 0) return !need;
  if (!top && dp[len][d][need] >= 0) return dp[len][d][need];
  int rtn = 0;
  int up = (top ? s[len] : 9);
  for (int i = 0; i <= up; ++i) {
    if (i == 4 || i == 7)
      rtn = (rtn + dfs(len - 1, k, need && !d, top && i == up, s)) % MOD;
    else
      rtn = (rtn + dfs(len - 1, max(0, d - 1), need, top && i == up, s)) % MOD;
  }
  if (!top) dp[len][d][need] = rtn;
  return rtn;
}
int main() {
  int t;
  scanf("%d %d", &t, &k);
  memset(dp, -1, sizeof(dp));
  while (t--) {
    cin >> l >> r;
    l.back() -= 1;
    for (int i = l.size() - 1; l[i] < '0' && i >= 0; --i) {
      l[i] = '9';
      l[i - 1] -= 1;
    }
    reverse(l.begin(), l.end());
    if (l.back() == '0') l.pop_back();
    reverse(r.begin(), r.end());
    for_each(l.begin(), l.end(), [](char &c) { c -= '0'; });
    for_each(r.begin(), r.end(), [](char &c) { c -= '0'; });
    int rans = dfs(r.size() - 1, 0, 1, 1, r);
    int lans = dfs(l.size() - 1, 0, 1, 1, l);
    printf("%d\n", (rans - lans + MOD) % MOD);
  }
}
