#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (a < b) a = b;
}
const int oo = 1 << 30;
const double eps = 1e-7;
const int N = 1 << 10;
const int M = 1;
const long long P = 1000000007;
long long dp[N][N];
int mx;
char s[N];
inline int is(int k) { return 4 == k || 7 == k; }
inline int to(int f, int flag) {
  flag = is(flag);
  if (0 == f) return 0;
  if (1 == f || mx + 1 == f) return flag ? f - 1 : (mx + 1);
  return flag ? 0 : f - 1;
}
long long dfs(int id, int f) {
  if (id < 0) return !f;
  long long &r = dp[id][f];
  if (-1 != r) return r;
  r = 0;
  id--;
  r += 8 * dfs(id, to(f, 0));
  r += 2 * dfs(id, to(f, 4));
  return r %= P;
}
void pre() {
  (memset((dp), -1, sizeof(dp)));
  dfs(1001, mx + 1);
}
long long dfs_d(int id, int f) {
  if (id < 0) return !f;
  int k, u;
  long long r = 0;
  u = s[id];
  id--;
  for (k = 0; k < (u); k++) r += dfs(id, to(f, k));
  r += dfs_d(id, to(f, k));
  return r %= P;
}
long long doit(int flag) {
  (memset((s), 0, sizeof(s)));
  scanf("%s", s);
  int i, sn;
  sn = strlen(s);
  for (i = 0; i < (sn); i++) s[i] -= '0';
  reverse(s, s + sn);
  s[0] -= flag;
  for (i = 0; s[i] < 0; i++) {
    s[i] = 9;
    s[i + 1]--;
  }
  return dfs_d(sn, mx + 1);
}
int main() {
  int T, _ = 0;
  long long ans = 0;
  scanf("%d %d", &T, &mx);
  pre();
  while (_++ < T) {
    ans = -doit(1);
    ans += doit(0);
    ans = (ans % P + P) % P;
    printf("%I64d\n", ans);
  }
  return 0;
}
