#include <bits/stdc++.h>
using namespace std;
inline long long rd() {
  long long x = 0;
  int ch = getchar(), f = 1;
  while (!isdigit(ch) && (ch != '-') && (ch != EOF)) ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline void rt(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10)
    rt(x / 10), putchar(x % 10 + '0');
  else
    putchar(x + '0');
}
const int maxn = 1005;
char s[maxn];
int T, k, a[maxn], n, f[maxn][maxn], num[maxn][2];
int dp(int pos, int dis, int eq) {
  if (pos == -1) return 0;
  if (!eq && ~f[pos][dis]) return f[pos][dis];
  int ret = 0;
  for (int i = 0, ed = eq ? a[pos] : 9; i <= ed; i++) {
    if (i == 4 || i == 7)
      if (dis < k)
        ret += num[pos][eq && i == ed];
      else
        ret += dp(pos - 1, 0, eq && i == ed);
    else
      ret += dp(pos - 1, dis == k ? k : dis + 1, eq && i == ed);
    ret -= ret >= 1000000007 ? 1000000007 : 0;
  }
  if (!eq) f[pos][dis] = ret;
  return ret;
}
int calc(char *s) {
  for (int i = 0; i <= (int)n - 1; i++) a[i] = s[i] - '0';
  num[0][0] = num[0][1] = 1;
  for (int i = 1; i <= (int)n - 1; i++)
    num[i][0] = (long long)num[i - 1][0] * 10 % 1000000007;
  for (int i = 1; i <= (int)n - 1; i++)
    num[i][1] =
        ((long long)a[i - 1] * num[i - 1][0] % 1000000007 + num[i - 1][1]) %
        1000000007;
  return dp(n - 1, k, 1);
}
int main() {
  T = rd(), k = rd();
  memset(f, -1, sizeof f);
  while (T--) {
    scanf("%s", s);
    n = strlen(s);
    reverse(s, s + n);
    s[0]--;
    for (int i = 0; s[i] == '0' - 1; i++) s[i] += 10, s[i + 1]--;
    while (n > 0 && s[n - 1] == '0') n--;
    int sl = calc(s);
    scanf("%s", s);
    n = strlen(s);
    reverse(s, s + n);
    int sr = calc(s);
    rt((sr - sl + 1000000007) % 1000000007), putchar('\n');
  }
}
