#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10, mod = 1e9 + 7;
int q, cnt, f[N], t, k;
long long dp[N][N][2], x1, x2;
char c[N];
bool show;
long long dfs(int pos, int dis, bool lim, bool ok) {
  if (!pos) return ok;
  if (!lim and ~dp[pos][dis][ok]) return dp[pos][dis][ok];
  long long ans = 0;
  for (register int i = 0; i <= (lim ? f[pos] : 9); ++i) {
    if (i != 4 and i != 7)
      ans += dfs(pos - 1, max(dis - 1, 0), lim and i == f[pos], ok);
    else
      ans += dfs(pos - 1, k, lim and i == f[pos], ok || dis);
    if (ans >= mod) ans %= mod;
  }
  if (!lim) dp[pos][dis][ok] = ans;
  return ans;
}
inline bool check() {
  int x = 1e9;
  for (register int i = cnt; i; --i) {
    if (f[i] == 4 or f[i] == 7) {
      if (x - i <= k) return true;
      x = i;
    }
  }
  return false;
}
inline long long sol(bool minus) {
  scanf("%s", c + 1);
  cnt = strlen(c + 1);
  for (register int i = 1; i <= cnt; ++i) f[i] = c[cnt - i + 1] ^ 48;
  f[1] -= minus;
  if (!minus and f[1] == 1) show = 1;
  for (register int i = 1; i <= cnt; ++i) {
    if (f[i] < 0)
      f[i] += 10, --f[i + 1];
    else
      break;
  }
  return dfs(cnt, 0, 1, 0);
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%d%d", &t, &k);
  while (t--) {
    x1 = sol(1);
    x2 = sol(0);
    printf("%lld\n", (x2 - x1 + mod) % mod);
  }
  return 0;
}
