#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e3+30;
const int MOD=1e9+7;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n,k,a,n1,n2;
ll luc[M],cnt=0,sum[M];
void dfs(int d,ll now){
if(now) luc[++cnt]=now;
if(d==10) return;
dfs(d+1,now*10+4);
dfs(d+1,now*10+7);
}
ll f[N],c[N];
void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
if(b==0) {d=a;x=1;y=0;}
else {exgcd(b,a%b,d,y,x);y-=(a/b)*x;}
}
ll inv(ll a,ll n){
ll d,x,y;
exgcd(a,n,d,x,y);
return d==1?(x+n)%n:-1;
}
void dp(){
f[0]=1;
for(int i=1;i<=cnt;i++) if(sum[i]>=2)
for(int j=i;j>=1;j--)
f[j]=(f[j]+f[j-1]*sum[i]%MOD)%MOD;
c[0]=1;
for(int i=1;i<=n1;i++)
c[i]=c[i-1]*(n1-i+1)%MOD*inv(i,MOD)%MOD;
}
int main(){
n=read();k=read();
n1=n;
dfs(1,0);
sort(luc+1,luc+1+cnt);
for(int i=1;i<=n;i++){
a=read();
int p=lower_bound(luc+1,luc+1+cnt,a)-luc;
if(luc[p]==a){
sum[p]++; //sum[p]==1 regard as unlucky
if(sum[p]==2) n2++,n1-=2;
if(sum[p]>2) n1--;
}
}
dp();
ll ans=0;
for(int i=0;i<=k;i++) ans=(ans+c[i]*f[k-i]%MOD)%MOD;
printf("%lld",ans);
}