#include <bits/stdc++.h>
using namespace std;
struct node {
long long w, h;
node() {
w = 0, h = 0;
}
node(long long w, long long h): w(w), h(h) {}
bool operator < (const node &a)const {
return a.w == w ? h > a.h : w > a.w;
}
};
long long n, k, ans;
priority_queue<node> q;
int main() {
cin >> n >> k;
for (long long i = 1; i <= n; i++) {
long long input;
cin >> input;
q.push(node(input, 1));
}
long long d = (n - 1) % (k - 1);
for (long long i = 1; i <= d; i++) {
q.push(node(0, 1));
}
while (q.size() > 1) {
long long h = -1;
long long sum = 0;
for (long long i = 1; i <= k; i++) {
node tmp = q.top();
q.pop();
h = max(h, tmp.h);
sum += tmp.w;
}
q.push(node(sum, h + 1));
ans += sum;
}
cout << ans << endl;
cout << q.top().h - 1 << endl;
return 0;
}