#include<iostream>
#include <algorithm>
using namespace std;
int N,K;
int A[100000];
int mod;
bool cmp(int a,int b){
return (a%mod) > (b%mod);
}
int main(){
cin >> N >> K;
int M = 0;
for(int i=0; i<N; i++) {
cin >> A[i];
M = max(M, A[i]);
}
int best = 0;
for(int b=1; b <= M; b++) {
int full = 0;
for(int i=0; i<N; i++)
full += A[i]/b;//统计当每个糖果罐里至少拥有的糖果数为b时可装的糖果罐数量
if(full < K/2) //当full不够K/2时,说明小橙得到的糖果数量为0,因为糖果数量较多的K/2个糖果罐给妹妹
break;//往后的b越来越大,肯定不满足题意,可直接结束枚举
if(full >= K) { //当full大于K时,说明小橙得到的糖果数量为一半
best = max(best, b*(K/2)); //取大值
continue;
}
mod = b;
sort(A, A+N, cmp);
int cur = b*(full - K/2);
for(int i=0; i<N && i+full<K; i++)
cur += A[i]%b;
best = max(best,cur);
}
cout << best << endl;
}