#include<iostream>
#include<queue>
#include<stack>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
using namespace std;
int num[30];
bool state[30];
int n,k;
int ans = 0;
int temp = 0;
stack<int> q;
bool ifPrime(int v)
{
if(v==2) return true;
else if(v==1) return false;
for(int i = 2;i<sqrt(v);i++){
if(v%i==0) return false;
}
return true;
}
void dfs(int v)
{
if(v==k)
{
if(ifPrime(temp)==true){
ans++;
}
return;
}else
{
for(int i = v;i<n;i++)
{
if(state[i]==false)
{
if(n-i+q.size()<k){
return;
}
state[i] = true;
temp += num[i];
q.push(num[i]);
dfs(v+1);
state[i] = false;
temp-=q.top();
q.pop();
}
}
}
}
int main()
{
cin>>n>>k;
for(int i = 0;i<n;i++)
{
cin>>num[i];
state[i] = false;
}
dfs(0);
cout<<ans;
return 0;
}