#include <bits/stdc++.h>
using namespace std;
long long dp[1005][1005];
int K;
void init() {
  dp[0][0] = 0;
  dp[0][K + 1] = 1;
  for (int i = 1; i <= 1000; i++) {
    dp[i][0] = (dp[i - 1][1] * 2 + dp[i - 1][0] * 8) % 1000000007;
    for (int j = 1; j <= K; j++)
      dp[i][j] = (dp[i - 1][K + 1] * 2 + dp[i - 1][(j + 1) % (K + 1)] * 8) %
                 1000000007;
    dp[i][K + 1] = 10 * dp[i - 1][K + 1] % 1000000007;
  }
}
int solve(char s[], int len, bool flag = false) {
  int j = 0, ret = 0;
  for (int i = 0; i < len; i++) {
    int t = s[i] - '0';
    int a = t <= 4 ? 0 : (t <= 7 ? 1 : 2), b = t - a, g;
    if (i == 0) b--;
    g = j == 0 ? 1 : (K + 1);
    ret += dp[len - i - 1][g] * a % 1000000007;
    ret %= 1000000007;
    g = j;
    if (g != 0 && g != K + 1) g = (g + 1) % (K + 1);
    ret += dp[len - i - 1][g] * b % 1000000007;
    ret %= 1000000007;
    if (i)
      ret = (ret +
             (7 * dp[len - i - 1][0] + 2 * dp[len - i - 1][1]) % 1000000007) %
            1000000007;
    if (s[i] == '4' || s[i] == '7')
      j = j == 0 ? 1 : (K + 1);
    else if (j != 0 && j != K + 1)
      j = (j + 1) % (K + 1);
  }
  if (flag && j == K + 1) ret = (ret + 1) % 1000000007;
  return ret;
}
int main() {
  int cas;
  scanf("%d%d", &cas, &K);
  init();
  char l[1005], r[1005];
  int len;
  while (cas--) {
    scanf("%s%s", l, r);
    len = strlen(l);
    int g = solve(l, len);
    len = strlen(r);
    int h = solve(r, len, 1);
    printf("%d\n", (h - g + 1000000007) % 1000000007);
  }
  return 0;
}
