#include <bits/stdc++.h>
using namespace std;
struct node
{
long long w, len;
node() {
this->w = 0;
this->len = 0;
}
};
priority_queue<node> q;
bool operator<(node a, node b) {
if (a.w < b.w) {
return true;
} else if (a.w == b.w) {
if (a.len < b.len) {
return true;
}
}
}
int n, k;
long long ans;
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
node user;
cin >> user.w;
q.push(user);
}
while ((n - 1) % (k - 1) != 0) {
node s;
q.push(s);
}
while (q.size() > 1) {
long long maxlen = 0, sum = 0;
for (int i = 1; i <= k; i++) {
maxlen = max(maxlen, q.top().len);
sum += q.top().w;
q.pop();
}
ans += sum;
node temp;
temp.len = maxlen + 1;
temp.w = sum;
q.push(temp);
}
cout << ans << endl << q.top().len << endl;
return 0;
}