#include <bits/stdc++.h>
using namespace std;
static const int M = 1000000007;
static int K;
static bool isNearlyLucky(const string &S) {
  int last = -K - 1;
  for (int i = 0; i < int((int((S).size()))); ++i)
    if (S[i] == '4' || S[i] == '7') {
      if (i - last <= K) return true;
      last = i;
    }
  return false;
}
static vector<int> ipow10;
static int memo[5000][1001];
static int countLuckyNumbers(int digitsLeft, int distToLucky) {
  if (digitsLeft == 0) return 0;
  if (distToLucky > K) distToLucky = K + 1;
  int &m = memo[digitsLeft - 1][distToLucky - 1];
  if (m >= 0) return m;
  long long res = 0;
  if (distToLucky <= K) {
    res += (long long)2 * ipow10[digitsLeft - 1];
  } else {
    res += (long long)2 * countLuckyNumbers(digitsLeft - 1, 1);
  }
  res += (long long)8 * countLuckyNumbers(digitsLeft - 1, distToLucky + 1);
  return m = res % M;
}
static int countLuckyLessThan(const string &S) {
  int distToLucky = K + 1;
  bool luckyPrefix = false;
  long long res = 0;
  for (int i = 0; i < int((int((S).size()))); ++i) {
    int luckyDigits = 0, nonLuckyDigits = 0;
    for (char ch = '0'; ch < S[i]; ++ch) {
      if (ch == '4' || ch == '7')
        ++luckyDigits;
      else
        ++nonLuckyDigits;
    }
    if (luckyPrefix) {
      res += (long long)nonLuckyDigits * ipow10[(int((S).size())) - i - 1];
    } else {
      res += (long long)nonLuckyDigits *
             countLuckyNumbers((int((S).size())) - i - 1, distToLucky + 1);
    }
    if (luckyPrefix || distToLucky <= K) {
      res += (long long)luckyDigits * ipow10[(int((S).size())) - i - 1];
    } else {
      res += (long long)luckyDigits *
             countLuckyNumbers((int((S).size())) - i - 1, 1);
    }
    if (S[i] == '4' || S[i] == '7') {
      if (distToLucky <= K) luckyPrefix = true;
      distToLucky = 1;
    } else {
      distToLucky += 1;
    }
  }
  return res % M;
}
int main() {
  memset(memo, -1, sizeof(memo));
  ipow10 = vector<int>(1, 1);
  int N;
  cin >> N >> K;
  for (int i = 0; i < int(N); ++i) {
    string L, R;
    cin >> L >> R;
    while ((int((ipow10).size())) < (int((R).size())))
      ipow10.push_back((long long)ipow10.back() * 10 % M);
    cout << (countLuckyLessThan(R) + M - countLuckyLessThan(L) +
             isNearlyLucky(R)) %
                M
         << '\n';
  }
}
