#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;
}
