#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const double PI = acos(-1.0);
const int inf = 0x7f7f7f7f;
inline int max(int a, int b) {
  if (a > b) return a;
  return b;
}
inline int min(int a, int b) {
  if (a < b) return a;
  return b;
}
template <class T>
inline T lowbit(T a) {
  return a & -a;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void checkmin(T &a, T b) {
  if (a == -1 || a > b) a = b;
}
const int Mod = 1000000007;
const int maxn = 1024;
int K;
int dig[maxn];
int dp[maxn][maxn << 1];
char s1[maxn], s2[maxn];
int dfs(int pos, int dist, bool doing) {
  if (pos == -1) return dist == 0;
  if (!doing && dp[pos][dist] != -1) return dp[pos][dist];
  int end = doing ? dig[pos] : 9;
  int ans = 0;
  for (int i = 0; i <= end; i++) {
    int ndist = dist == 0 ? 0 : dist + 1;
    if (i == 4 || i == 7) {
      if (dist <= K)
        ndist = 0;
      else
        ndist = 1;
    }
    ans = (ans + dfs(pos - 1, ndist, doing && i == end)) % Mod;
  }
  if (!doing) dp[pos][dist] = ans;
  return ans;
}
int gao(char s[]) {
  int pos = 0;
  int len = strlen(s);
  for (int i = len - 1; i >= 0; i--) {
    dig[pos++] = s[i] - '0';
  }
  return dfs(pos - 1, K + 2, 1);
}
bool chk(char s[]) {
  int pre = -1;
  for (int i = 0; s[i]; i++) {
    if (s[i] == '4' || s[i] == '7') {
      if (pre == -1)
        pre = i;
      else {
        if (i - pre <= K) return true;
        pre = i;
      }
    }
  }
  return false;
}
int main() {
  memset(dp, -1, sizeof(dp));
  int t;
  scanf("%d%d", &t, &K);
  while (t--) {
    scanf("%s%s", s1, s2);
    int a = gao(s1);
    int b = gao(s2);
    if (chk(s1)) a--;
    b = ((b - a) % Mod + Mod) % Mod;
    printf("%d\n", b);
  }
  return 0;
}
