#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int n, k;
int dp[maxn][maxn][2][2], a[maxn];
char s[maxn];
int dfs(int pos, int dis, int ishave, int flag, bool lim) {
  if (pos == 0) return flag;
  if (!lim && dp[pos][dis][ishave][flag] != -1)
    return dp[pos][dis][ishave][flag];
  int up = lim ? a[pos] : 9, ans = 0;
  for (int i = 0; i <= up; i++) {
    if (i == 4 || i == 7)
      ans = (ans + dfs(pos - 1, 1, 1, (dis <= k && ishave) || flag,
                       lim && i == a[pos])) %
            1000000007;
    else
      ans = (ans + dfs(pos - 1, dis + 1, ishave, flag, lim && i == a[pos])) %
            1000000007;
  }
  if (!lim) dp[pos][dis][ishave][flag] = ans;
  return ans;
}
int check() {
  int pre = -1;
  for (int i = 0; i < n; i++)
    if (s[i] == '4' || s[i] == '7') {
      if (pre != -1 && i - pre <= k) return 1;
      pre = i;
    }
  return 0;
}
int main() {
  int T;
  scanf("%d%d", &T, &k);
  memset(dp, -1, sizeof(dp));
  while (T--) {
    scanf("%s", s);
    n = strlen(s);
    for (int i = 1; i <= n; i++) a[i] = s[n - i] - '0';
    int ans = (dfs(n, 0, 0, 0, 1) - check() + 1000000007) % 1000000007;
    scanf("%s", s);
    n = strlen(s);
    for (int i = 1; i <= n; i++) a[i] = s[n - i] - '0';
    ans = (dfs(n, 0, 0, 0, 1) - ans + 1000000007) % 1000000007;
    printf("%d\n", ans);
  }
  return 0;
}
