#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N = 1e5 + 9;
const int M = 3e3;
ll n, X, dp[N * 5], may[5];
pair <ll, ll> pa[N];
vector <ll> v[5];
bool cmp(pair <ll, ll> x, pair <ll, ll> y)
{
return x.first * y.second < y.first * x.second;
}
void readd()
{
cin >> n >> X;
for (ll i = 1; i <= n; i++)
{
ll a;
cin >> a;
ll x = (a + 4) / 5; ll y = x * 5 - a;
pa[i] = make_pair(x, y);
v[y].push_back(x);
}
}
void solve()
{
readd();
for (ll i = 0; i < 5; i++) sort(v[i].begin(), v[i].end());
sort(pa + 1, pa + n + 1, cmp);
ll num = X / 5;
for (ll i = 1; i <= n; i++)
{
if (num < pa[i].first) break;
num -= pa[i].first; may[pa[i].second]++;
}
num = X / 5;
ll ans = X % 5, sum = 0;
memset(dp, 0x3f, sizeof dp);
dp[0] = 0;
for (ll sz = 0; sz < 5; sz++)
{
ll l = max(1ll, may[sz] - M);
ll r = min((ll)v[sz].size(), may[sz] + M);
for (ll i = 1; i < l; i++)
{
ans += sz; num -= v[sz][i - 1];
}
for (ll i = l; i <= r; i++)
{
for (ll j = sum; j >= 0; j--)
{
dp[j + sz] = min(dp[j + sz], dp[j] + v[sz][i - 1]);
}
sum += sz;
}
}
for (ll i = sum; i >= 0; i--)
if (dp[i] <= num)
{
ans += i;
break;
}
cout << ans << '\n';
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
while (_--)
solve();
return 0;
}