#include <bits/stdc++.h>
using namespace std;
template <typename T>
T abs(T x) {
  return x > 0 ? x : -x;
}
template <typename T>
T sqr(T x) {
  return x * x;
}
const long long mod = 1000000007;
const int maxn = 1e5 + 5;
long long add(long long x, long long y) { return (x + y) % mod; }
long long sub(long long x, long long y) { return (x + mod - y) % mod; }
long long mul(long long x, long long y) { return (x * y) % mod; }
long long bpow(long long x, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) {
      res = mul(res, x);
    }
    x = mul(x, x);
    n >>= 1;
  }
  return res;
}
long long fact[maxn], invFact[maxn];
long long C(long long n, long long k) {
  if (k > n) {
    return 0;
  }
  return mul(fact[n], mul(invFact[k], invFact[n - k]));
}
bool isLucky(int x) {
  while (x) {
    int d = x % 10;
    if (d != 4 && d != 7) {
      return false;
    }
    x /= 10;
  }
  return true;
}
long long f[maxn], g[maxn], w[maxn];
int main() {
  fact[0] = invFact[0] = 1;
  for (int i = 1; i < maxn; i++) {
    fact[i] = mul(fact[i - 1], i);
    invFact[i] = bpow(fact[i], mod - 2);
  }
  int n, k;
  scanf("%d %d", &n, &k);
  map<int, int> a;
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    a[x]++;
  }
  int right = 0;
  map<int, int> cnt;
  for (auto kv : a) {
    if (isLucky(kv.first)) {
      cnt[kv.second]++;
      right++;
    } else {
      cnt[1] += kv.second;
      right += kv.second;
    }
  }
  int ub = 0;
  f[0] = 1;
  for (auto kv : cnt) {
    right -= kv.second;
    long long p = 1;
    for (int i = 0; i <= kv.second; i++) {
      w[i] = mul(C(kv.second, i), p);
      p = mul(p, kv.first);
    }
    for (int j = 0; j < maxn; j++) {
      g[j] = 0;
    }
    int r = k, l = max(0, k - right);
    for (int i = l; i <= r; i++) {
      for (int j = 0; j <= kv.second; j++) {
        int y = i - j;
        if (y < 0) {
          break;
        }
        if (y > ub) {
          continue;
        }
        g[i] = add(g[i], mul(w[j], f[y]));
      }
    }
    ub += kv.second;
    for (int i = 0; i < maxn; i++) {
      f[i] = g[i];
    }
  }
  cout << f[k] << endl;
  return 0;
}
