#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const long long mod = 1000000007;
const int e = 1003;
long long dp[N][N];
char a[N], b[N], temp[N];
int k, len;
long long dfs(char *s, int pos, int state, int u) {
  if (pos >= len) return state == e;
  if (dp[pos][state] != -1 && !u) return dp[pos][state];
  long long ret = 0;
  int ed = u ? s[pos] : 9;
  for (int i = 0; i <= ed; i++) {
    if (state == e)
      ret += dfs(s, pos + 1, e, u && i == ed);
    else if (state == 0) {
      if (i == 4 || i == 7)
        ret += dfs(s, pos + 1, 1, u && i == ed);
      else
        ret += dfs(s, pos + 1, 0, u && i == ed);
    } else if (state <= k) {
      if (i == 4 || i == 7)
        ret += dfs(s, pos + 1, e, u && i == ed);
      else
        ret += dfs(s, pos + 1, state + 1, u && i == ed);
    } else {
      if (i == 4 || i == 7)
        ret += dfs(s, pos + 1, 1, u && i == ed);
      else
        ret += dfs(s, pos + 1, state + 1, u && i == ed);
    }
  }
  ret %= mod;
  if (!u) dp[pos][state] = ret;
  return ret;
}
void sub() {
  int d = 1;
  for (int i = len - 1; d && i >= 0; i--) {
    if (a[i] == '0') {
      d = 1;
      a[i] = '9';
    } else {
      d = 0;
      a[i]--;
    }
  }
}
int main() {
  int m;
  len = 1002;
  while (~scanf("%d %d", &m, &k)) {
    memset(dp, -1, sizeof(dp));
    while (m--) {
      scanf("%s %s", a, b);
      memset(temp, '0', sizeof(char) * (len - strlen(a)));
      temp[len - strlen(a)] = 0;
      strcat(temp, a);
      strcpy(a, temp);
      memset(temp, '0', sizeof(char) * (len - strlen(b)));
      temp[len - strlen(b)] = 0;
      strcat(temp, b);
      strcpy(b, temp);
      sub();
      for (int i = 0; i < len; i++) a[i] -= '0', b[i] -= '0';
      printf("%I64d\n",
             ((dfs(b, 0, 0, 1) - dfs(a, 0, 0, 1)) % mod + mod) % mod);
    }
  }
  return 0;
}
