#include <bits/stdc++.h>
using namespace std;
int n;
long long k, mxd;
vector<long long> a, b;
vector<long long> luk;
void solve() {
  long long disL = 0, disR = 0, nL = n, nR = 0;
  int ans = 0;
  double dL = 0, dR = 0;
  for (int i = 0; i < n; i++) dL += a[i], disL += a[i];
  for (int i = 1, j = 1, pa = 0, pb = 0; i < (int)luk.size(); i++) {
    while (pa < n && a[pa] <= luk[i]) {
      --nL;
      disL -= a[pa];
      dL -= a[pa];
      pa++;
    }
    while (j < (int)luk.size() && luk[j] - luk[i] <= mxd) {
      if (dL - nL * 1.0 * luk[i] + nR * 1.0 * luk[j] - dR <= 1e19) {
        if (disL - nL * luk[i] + nR * luk[j] - disR <= k) {
          if (i <= j) {
            ans = max(ans, j - i + 1);
          }
        } else
          break;
      } else
        break;
      j++;
      while (pb < n && b[pb] <= luk[j]) {
        ++nR;
        disR += b[pb];
        dR += b[pb];
        pb++;
      }
    }
  }
  printf("%d\n", ans);
}
int main(void) {
  scanf("%d%I64d", &n, &k);
  mxd = (1LL << 60);
  for (int i = 0; i < n; i++) {
    long long x, y;
    scanf("%I64d%I64d", &x, &y);
    mxd = min(mxd, y - x);
    a.push_back(x);
    b.push_back(y);
  }
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());
  luk.push_back(0);
  for (int i = 0; luk[i] * 10.0 < 1e18; i++) {
    luk.push_back(luk[i] * 10 + 4);
    luk.push_back(luk[i] * 10 + 7);
  }
  solve();
  return 0;
}
