#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int t, k, l[1005], r[1005], lenl, lenr;
long long f[1005][1005][2];
long long dfs(int *x, int Index, int d, int q, int lim) {
  if (Index < 1) return (long long)q;
  if (!lim && f[Index][d][q] != -1) return f[Index][d][q];
  long long res = 0;
  int up = lim ? x[Index] : 9;
  for (int i = 0; i <= up; i++) {
    if (i != 4 && i != 7)
      res = (res + dfs(x, Index - 1, max(d - 1, 0), q, lim && i == up)) % mod;
    else
      res = (res + dfs(x, Index - 1, k, q || d, lim && i == up)) % mod;
  }
  if (!lim) f[Index][d][q] = res;
  return res;
}
long long solve(int *x, int len) { return dfs(x, len, 0, 0, 1); }
int main() {
  scanf("%d %d", &t, &k);
  memset(f, -1, sizeof f);
  while (t--) {
    char now[1005];
    scanf("%s", now + 1);
    lenl = strlen(now + 1);
    for (int i = 1; i <= lenl; i++) l[lenl - i + 1] = now[i] - 48;
    scanf("%s", now + 1);
    lenr = strlen(now + 1);
    for (int i = 1; i <= lenr; i++) r[lenr - i + 1] = now[i] - 48;
    l[1]--;
    int Index = 1;
    while (l[Index] < 0) {
      l[Index] = 9;
      l[Index + 1]--;
      Index++;
    }
    if (Index == lenl && !l[Index]) lenl--;
    printf("%lld\n", (solve(r, lenr) - solve(l, lenl) + mod) % mod);
  }
  return 0;
}
