#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const double PI = acos(-1.0);
const double EPS = 1e-10;
inline int readint() {
  int sum = 0;
  char c = getchar();
  bool f = 0;
  while (c < '0' || c > '9') {
    if (c == '-') f = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  if (f) return -sum;
  return sum;
}
inline long long readLL() {
  long long sum = 0;
  char c = getchar();
  bool f = 0;
  while (c < '0' || c > '9') {
    if (c == '-') f = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  if (f) return -sum;
  return sum;
}
int n, k;
int a[1005];
long long dp[1005][2015];
long long dfs(int pos, int state, bool limit) {
  if (pos == -1) return state == 0;
  if (!limit && dp[pos][state] != -1) return dp[pos][state];
  int up = limit ? a[pos] : 9;
  long long ans = 0;
  for (int i = 0; i <= up; i++) {
    int tstate = (state == 0 ? 0 : state + 1);
    if (i == 4 || i == 7) {
      if (state <= k) {
        tstate = 0;
      } else {
        tstate = 1;
      }
    }
    ans = (ans + dfs(pos - 1, tstate, limit && i == a[pos])) % mod;
  }
  if (!limit) dp[pos][state] = ans;
  return ans;
}
long long solve(char *x) {
  int pos = strlen(x);
  for (int i = 0; i < pos; i++) {
    a[i] = x[pos - i - 1] - '0';
  }
  return dfs(pos - 1, k + 10, true);
}
bool check(char *x) {
  int state = k + 10;
  int pos = strlen(x);
  for (int i = 0; i < pos; i++) {
    if (!state) break;
    if (x[i] == '4' || x[i] == '7') {
      if (state <= k) {
        state = 0;
      } else {
        state = 1;
      }
    } else {
      state++;
    }
  }
  return !state;
}
char l[1005], r[1005];
int main() {
  long long le, ri;
  n = readint();
  k = readint();
  memset(dp, -1, sizeof(dp));
  while (n--) {
    cin >> l >> r;
    long long ans = (solve(r) - solve(l)) % mod;
    ans += check(l);
    ans = (ans + mod) % mod;
    cout << ans << endl;
  }
}
