#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <fstream>
#include <queue>
#define rep(i, l, r) for(int i = l; i <= r; i++)
#define down(i, l, r) for(int i = l; i >= r; i--)
#define MS 56789
#define MAX 1037471823
#define Q 10007
using namespace std;
int n, m, a, t, now, l, r, mid, w[MS], s[MS];
int b, ans, dp[2][MS];
bool Check(int x)
{
int now = 0, t = 0;
rep(i, 1, n) if (now + w[i] <= x) now += w[i]; else t++, now = w[i];
if (t <= m) return true; else return false;
}
int main()
{
scanf("%d%d", &n, &m);
rep(i, 1, n) scanf("%d", &w[i]);
rep(i, 1, n) s[i] = s[i-1] + w[i];
rep(i, 1, n) if (a < w[i]) a = w[i];
l = a, r = 56789012;
while (l != r)
{
mid = (l+r) / 2;
if (Check(mid)) r = mid; else l = mid+1;
}
t = l; printf("%d ", t); now = 0; dp[0][0] = 1;
rep(i, 1, m+1)
{
now ^= 1;
a = 0; b = dp[1-now][a] % Q; dp[now][0] = 0;
rep(j, 1, n)
{
while (s[j] - s[a] > t) b = (b - dp[1-now][a++] + Q) % Q;
dp[now][j] = b;
b = (b + dp[1-now][j]) % Q;
}
ans = (dp[now][n] + ans) % Q;
}
printf("%d\n", ans);
return 0;
}
I2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxxdWV1ZT4KCiNkZWZpbmUgcmVwKGksIGwsIHIpIGZvcihpbnQgaSA9IGw7IGkgPD0gcjsgaSsrKQojZGVmaW5lIGRvd24oaSwgbCwgcikgZm9yKGludCBpID0gbDsgaSA+PSByOyBpLS0pCiNkZWZpbmUgTVMgNTY3ODkKI2RlZmluZSBNQVggMTAzNzQ3MTgyMwojZGVmaW5lIFEgMTAwMDcKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbiwgbSwgYSwgdCwgbm93LCBsLCByLCBtaWQsIHdbTVNdLCBzW01TXTsKaW50IGIsIGFucywgZHBbMl1bTVNdOwoKYm9vbCBDaGVjayhpbnQgeCkKewoJaW50IG5vdyA9IDAsIHQgPSAwOwoJcmVwKGksIDEsIG4pIGlmIChub3cgKyB3W2ldIDw9IHgpIG5vdyArPSB3W2ldOyBlbHNlIHQrKywgbm93ID0gd1tpXTsKCWlmICh0IDw9IG0pIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKQp7CglzY2FuZigiJWQlZCIsICZuLCAmbSk7CglyZXAoaSwgMSwgbikgc2NhbmYoIiVkIiwgJndbaV0pOwoJcmVwKGksIDEsIG4pIHNbaV0gPSBzW2ktMV0gKyB3W2ldOwoJcmVwKGksIDEsIG4pIGlmIChhIDwgd1tpXSkgYSA9IHdbaV07CglsID0gYSwgciA9IDU2Nzg5MDEyOwoJd2hpbGUgKGwgIT0gcikKCXsKCQltaWQgPSAobCtyKSAvIDI7CgkJaWYgKENoZWNrKG1pZCkpIHIgPSBtaWQ7IGVsc2UgbCA9IG1pZCsxOwoJfQoJdCA9IGw7IHByaW50ZigiJWQgIiwgdCk7IG5vdyA9IDA7IGRwWzBdWzBdID0gMTsKCXJlcChpLCAxLCBtKzEpCgl7CgkJbm93IF49IDE7CgkJYSA9IDA7IGIgPSBkcFsxLW5vd11bYV0gJSBROyBkcFtub3ddWzBdID0gMDsKCQlyZXAoaiwgMSwgbikKCQl7CgkJCXdoaWxlIChzW2pdIC0gc1thXSA+IHQpIGIgPSAoYiAtIGRwWzEtbm93XVthKytdICsgUSkgJSBROwoJCQlkcFtub3ddW2pdID0gYjsKCQkJYiA9IChiICsgZHBbMS1ub3ddW2pdKSAlIFE7CgkJfQoJCWFucyA9IChkcFtub3ddW25dICsgYW5zKSAlIFE7Cgl9CglwcmludGYoIiVkXG4iLCBhbnMpOwoJcmV0dXJuIDA7Cn0=