#include <bits/stdc++.h>
using namespace std;
bool Check(int val, int pos) { return bool(val & (1 << pos)); }
int Set(int val, int pos) { return val | (1 << pos); }
int Reset(int val, int pos) { return val & (~(1 << pos)); }
int Flip(int val, int pos) { return val ^ (1 << pos); }
long long t, caseno, n, k;
long long Pre(long long val, long long id) {
  long long tot = 0;
  while (val % id == 0) {
    val /= id;
    tot++;
  }
  return tot;
}
struct info {
  long long x, y;
} a[202];
long long dp[202][5003];
long long dp1[202][5003];
long long visit[202][5003];
int main() {
  long long i, j, f, ff;
  scanf("%lld%lld", &n, &k);
  long long tot = 0;
  for (i = 1; i <= n; i++) {
    long long x;
    scanf("%lld", &x);
    if (i == 1) ff = x;
    a[i].x = Pre(x, 2);
    a[i].y = Pre(x, 5);
    tot += a[i].y;
  }
  memset(dp, -1, sizeof dp);
  dp[0][0] = 0;
  long long res = 0;
  for (i = 1; i <= n; i++) {
    memset(visit, 0, sizeof visit);
    for (j = 1; j <= k; j++) {
      for (f = 0; f <= tot; f++) {
        if (a[i].y <= f && dp[j - 1][f - a[i].y] != -1) {
          dp1[j][f] = max(dp[j][f], a[i].x + dp[j - 1][f - a[i].y]);
          visit[j][f] = 1;
        }
      }
    }
    for (j = 1; j <= k; j++) {
      for (f = 0; f <= tot; f++) {
        if (visit[j][f]) {
          dp[j][f] = dp1[j][f];
        }
      }
    }
  }
  for (i = 1; i <= k; i++) {
    for (j = 0; j <= tot; j++) {
      if (dp[i][j] != -1) res = max(res, min(dp[i][j], j));
    }
  }
  printf("%lld\n", res);
  return 0;
}
