#include <bits/stdc++.h>
const double pi = acos(-1);
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
const int MAXN = 1e3 + 5;
const double eps = 1e-9;
using namespace std;
char l[MAXN], r[MAXN];
long long a[MAXN], dp[MAXN][2], d[MAXN][MAXN];
int k = 0;
int g(int p, int l, int b) {
  if (p == -1) return 0;
  if (!b && d[p][l] != -1) return d[p][l];
  int ret = 0;
  for (int i = 0, e = b ? a[p] : 9; i <= e; i++)
    if (i == 4 || i == 7) {
      if (l == k)
        ret = (ret + g(p - 1, 0, b && i == e)) % MOD;
      else
        ret = (ret + dp[p][b && i == e]) % MOD;
    } else
      ret = (ret + g(p - 1, l == k ? k : (l + 1), b && i == e)) % MOD;
  return b ? ret : (d[p][l] = ret);
}
int f(char *s) {
  int m = strlen(s);
  for (int i = m - 1; i >= 0; i--) a[i] = s[i] - '0';
  memset(dp, -1, sizeof dp);
  dp[0][0] = dp[0][1] = 1;
  for (int i = 1; i <= m; i++) dp[i][0] = (long long)dp[i - 1][0] * 10 % MOD;
  for (int i = 1; i <= m; i++)
    dp[i][1] =
        ((long long)dp[i - 1][1] + (long long)a[i - 1] * dp[i - 1][0]) % MOD;
  return g(m - 1, k, 1);
}
int main() {
  memset(d, -1, sizeof d);
  int t;
  scanf("%d", &(t)), scanf("%d", &(k));
  while (t--) {
    scanf("%s %s", l, r);
    int n = strlen(l);
    reverse(l, l + n);
    int a = 0;
    if (!(n == 1 && l[0] == '1')) {
      int i = 0;
      while (l[i] == '0') l[i++] = '9';
      l[i]--;
      if (i == n - 1 && l[i] == '0') n--;
      a = f(l);
    }
    n = strlen(r);
    reverse(r, r + n);
    printf("%d\n", ((f(r) - a + MOD) % MOD));
  }
  return 0;
}
