#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define task "test"
#define maxn 1500
#define MAXN 200005
constexpr long long INF = 1e18;
int n,m,k,l,r,s,t,maxflow;
vector<int> adj[maxn];
int a[maxn], c[maxn][maxn], f[maxn][maxn], trace[maxn];
bitset<MAXN> prime;
struct info{
int u, v, w;
bool operator < (const info &o) const{
return w < o.w;
}
};
void sang(){
prime.set();
prime[0] = prime[1] = 0;
for(int i = 2; i * i < MAXN; i++){
if(prime[i]){
for(int j = i * i; j < MAXN; j += i){
prime[j] = 0;
}
}
}
}
void bfs(){
fill(trace, trace + 2*n + 2, 0);
trace[s] = -1;
queue<int> q;
q.push(s);
while(!q.empty()){
int u = q.front();
q.pop();
for(int v : adj[u]) {
if(trace[v]) continue;
if(f[u][v] >= c[u][v]) continue;
trace[v] = u;
q.push(v);
}
}
}
void incflow(){
int v = t;
int x = INT_MAX;
while(v != s){
int u = trace[v];
x = min(x, c[u][v] - f[u][v]);
v = u;
}
maxflow += x;
v = t;
while(v != s){
int u = trace[v];
f[u][v] += x;
f[v][u] -= x;
v = u;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
if(fopen(task".inp","r")){
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
sang();
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
s = 0, t = 2*n + 1;
if(m & 1){
for(int i = 1; i <= n; i++){
c[s][i] = 1;
adj[s].push_back(i);
adj[i].push_back(s);
}
for(int i = n + 1; i <= 2*n; i++){
adj[i].push_back(t);
adj[t].push_back(i);
}
for(int i = 1; i <= n; i++){
for(int j = i; j <= n; j++){
if(i != j && prime[a[i] + a[j]]){
c[i][j + n] = 1;
c[j + n][t] = 1;
adj[i].push_back(j + n);
adj[j + n].push_back(i);
}
}
}
do{
bfs();
if(trace[t]){
incflow();
}
}while(trace[t]);
cout << maxflow;
}else{
int res;
cin >> res;
for(int i = 1; i <= n; i++){
c[s][i] = 1;
adj[s].push_back(i);
adj[i].push_back(s);
}
for(int i = n + 1; i <= 2*n; i++){
adj[i].push_back(t);
adj[t].push_back(i);
}
vector<info> b;
for(int i = 1; i <= n; i++){
for(int j = i; j <= n; j++){
if(i != j && prime[a[i] + a[j]]){
b.push_back({i, j, abs(a[i] - a[j])});
adj[i].push_back(j + n);
adj[j + n].push_back(i);
}
}
}
sort(b.begin(),b.end());
int ans = 0;
l = 1, r = n >> 1;
while(l <= r){
int mid = (l + r) >> 1;
int max_diff = res / mid;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
c[i][j + n] = 0;
c[j + n][t] = 0;
}
}
for(auto e : b){
if(e.w <= max_diff){
c[e.u][e.v + n] = 1;
c[e.v + n][t] = 1;
}else break;
}
maxflow = 0;
for (int i = 0; i <= 2 * n + 1; i++) {
for (int v : adj[i]) {
f[i][v] = 0;
f[v][i] = 0;
}
}
do{
bfs();
if(trace[t]){
incflow();
}
}while(trace[t]);
if(maxflow >= mid) {
ans = mid;
l = mid + 1;
}else r = mid - 1;
}
cout << ans;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHRhc2sgInRlc3QiCiNkZWZpbmUgbWF4biAxNTAwCiNkZWZpbmUgTUFYTiAyMDAwMDUKY29uc3RleHByIGxvbmcgbG9uZyBJTkYgPSAxZTE4OwoKaW50IG4sbSxrLGwscixzLHQsbWF4ZmxvdzsKdmVjdG9yPGludD4gYWRqW21heG5dOwppbnQgYVttYXhuXSwgY1ttYXhuXVttYXhuXSwgZlttYXhuXVttYXhuXSwgdHJhY2VbbWF4bl07CmJpdHNldDxNQVhOPiBwcmltZTsKc3RydWN0IGluZm97CiAgICBpbnQgdSwgdiwgdzsKICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgaW5mbyAmbykgY29uc3R7CiAgICAgICAgcmV0dXJuIHcgPCBvLnc7CiAgICB9Cn07CnZvaWQgc2FuZygpewogICAgcHJpbWUuc2V0KCk7CiAgICBwcmltZVswXSA9IHByaW1lWzFdID0gMDsKICAgIGZvcihpbnQgaSA9IDI7IGkgKiBpIDwgTUFYTjsgaSsrKXsKICAgICAgICBpZihwcmltZVtpXSl7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IGkgKiBpOyBqIDwgTUFYTjsgaiArPSBpKXsKICAgICAgICAgICAgICAgIHByaW1lW2pdID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQp2b2lkIGJmcygpewogICAgZmlsbCh0cmFjZSwgdHJhY2UgKyAyKm4gKyAyLCAwKTsKICAgIHRyYWNlW3NdID0gLTE7CiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBxLnB1c2gocyk7CiAgICB3aGlsZSghcS5lbXB0eSgpKXsKICAgICAgICBpbnQgdSA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGZvcihpbnQgdiA6IGFkalt1XSkgewogICAgICAgICAgICBpZih0cmFjZVt2XSkgY29udGludWU7CiAgICAgICAgICAgIGlmKGZbdV1bdl0gPj0gY1t1XVt2XSkgY29udGludWU7CiAgICAgICAgICAgIHRyYWNlW3ZdID0gdTsKICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBpbmNmbG93KCl7CiAgICBpbnQgdiA9IHQ7CiAgICBpbnQgeCA9IElOVF9NQVg7CiAgICB3aGlsZSh2ICE9IHMpewogICAgICAgIGludCB1ID0gdHJhY2Vbdl07CiAgICAgICAgeCA9IG1pbih4LCBjW3VdW3ZdIC0gZlt1XVt2XSk7CiAgICAgICAgdiA9IHU7CiAgICB9CiAgICBtYXhmbG93ICs9IHg7CiAgICB2ID0gdDsKICAgIHdoaWxlKHYgIT0gcyl7CiAgICAgICAgaW50IHUgPSB0cmFjZVt2XTsKICAgICAgICBmW3VdW3ZdICs9IHg7CiAgICAgICAgZlt2XVt1XSAtPSB4OwogICAgICAgIHYgPSB1OwogICAgfQp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKCiAgICBpZihmb3Blbih0YXNrIi5pbnAiLCJyIikpewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KCiAgICBzYW5nKCk7CgogICAgY2luID4+IG4gPj4gbTsKCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CiAgICBzID0gMCwgdCA9IDIqbiArIDE7CiAgICBpZihtICYgMSl7CiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgICAgICBjW3NdW2ldID0gMTsKICAgICAgICAgICAgYWRqW3NdLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgYWRqW2ldLnB1c2hfYmFjayhzKTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpID0gbiArIDE7IGkgPD0gMipuOyBpKyspewogICAgICAgICAgICBhZGpbaV0ucHVzaF9iYWNrKHQpOwogICAgICAgICAgICBhZGpbdF0ucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IGk7IGogPD0gbjsgaisrKXsKICAgICAgICAgICAgICAgIGlmKGkgIT0gaiAmJiBwcmltZVthW2ldICsgYVtqXV0pewogICAgICAgICAgICAgICAgICAgIGNbaV1baiArIG5dID0gMTsKICAgICAgICAgICAgICAgICAgICBjW2ogKyBuXVt0XSA9IDE7CiAgICAgICAgICAgICAgICAgICAgYWRqW2ldLnB1c2hfYmFjayhqICsgbik7CiAgICAgICAgICAgICAgICAgICAgYWRqW2ogKyBuXS5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZG97CiAgICAgICAgICAgIGJmcygpOwogICAgICAgICAgICBpZih0cmFjZVt0XSl7CiAgICAgICAgICAgICAgICBpbmNmbG93KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9d2hpbGUodHJhY2VbdF0pOwogICAgICAgIGNvdXQgPDwgbWF4ZmxvdzsKICAgIH1lbHNlewogICAgICAgIGludCByZXM7CiAgICAgICAgY2luID4+IHJlczsKCiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgICAgICBjW3NdW2ldID0gMTsKICAgICAgICAgICAgYWRqW3NdLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgYWRqW2ldLnB1c2hfYmFjayhzKTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpID0gbiArIDE7IGkgPD0gMipuOyBpKyspewogICAgICAgICAgICBhZGpbaV0ucHVzaF9iYWNrKHQpOwogICAgICAgICAgICBhZGpbdF0ucHVzaF9iYWNrKGkpOwogICAgICAgIH0KICAgICAgICB2ZWN0b3I8aW5mbz4gYjsKICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IGk7IGogPD0gbjsgaisrKXsKICAgICAgICAgICAgICAgIGlmKGkgIT0gaiAmJiBwcmltZVthW2ldICsgYVtqXV0pewogICAgICAgICAgICAgICAgICAgIGIucHVzaF9iYWNrKHtpLCBqLCBhYnMoYVtpXSAtIGFbal0pfSk7CiAgICAgICAgICAgICAgICAgICAgYWRqW2ldLnB1c2hfYmFjayhqICsgbik7CiAgICAgICAgICAgICAgICAgICAgYWRqW2ogKyBuXS5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNvcnQoYi5iZWdpbigpLGIuZW5kKCkpOwogICAgICAgIGludCBhbnMgPSAwOwogICAgICAgIGwgPSAxLCByID0gbiA+PiAxOwogICAgICAgIHdoaWxlKGwgPD0gcil7CiAgICAgICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgICAgIGludCBtYXhfZGlmZiA9IHJlcyAvIG1pZDsKICAgICAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgICAgICAgICAgZm9yKGludCBqID0gMTsgaiA8PSBuOyBqKyspewogICAgICAgICAgICAgICAgICAgIGNbaV1baiArIG5dID0gMDsKICAgICAgICAgICAgICAgICAgICBjW2ogKyBuXVt0XSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yKGF1dG8gZSA6IGIpewogICAgICAgICAgICAgICAgaWYoZS53IDw9IG1heF9kaWZmKXsKICAgICAgICAgICAgICAgICAgICBjW2UudV1bZS52ICsgbl0gPSAxOwogICAgICAgICAgICAgICAgICAgIGNbZS52ICsgbl1bdF0gPSAxOwogICAgICAgICAgICAgICAgfWVsc2UgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWF4ZmxvdyA9IDA7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDIgKiBuICsgMTsgaSsrKSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB2IDogYWRqW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgZltpXVt2XSA9IDA7CiAgICAgICAgICAgICAgICAgICAgZlt2XVtpXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG97CiAgICAgICAgICAgICAgICBiZnMoKTsKICAgICAgICAgICAgICAgIGlmKHRyYWNlW3RdKXsKICAgICAgICAgICAgICAgICAgICBpbmNmbG93KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH13aGlsZSh0cmFjZVt0XSk7CiAgICAgICAgICAgIGlmKG1heGZsb3cgPj0gbWlkKSB7CiAgICAgICAgICAgICAgICBhbnMgPSBtaWQ7CiAgICAgICAgICAgICAgICBsID0gbWlkICsgMTsKICAgICAgICAgICAgfWVsc2UgciA9IG1pZCAtIDE7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zOwogICAgfQogICAgcmV0dXJuIDA7Cn0K