import math
def find(u, par):
if par[u] != u:
par[u] = find(par[u], par)
return par[u]
def union(u, v, par, size):
u_root = find(u, par)
v_root = find(v, par)
if u_root == v_root:
return
if size[u_root] < size[v_root]:
par[u_root] = v_root
size[v_root] += size[u_root]
else:
par[v_root] = u_root
size[u_root] += size[v_root]
def ip():
return map(int,input().split())
T=1
# T=int(input())
for __ in range(T):
# n=int(input())
n,m=ip()
a=list(ip())
a.sort()
x=[0 for _ in range(m)]
res=[]
curr=0
for i in range(n):
r=i%m
res.append(curr+a[i]+x[r])
x[r]+=a[i]
curr=res[-1]
print(*res)
aW1wb3J0IG1hdGgKZGVmIGZpbmQodSwgcGFyKToKICAKICAgIGlmIHBhclt1XSAhPSB1OgogICAgICAgIHBhclt1XSA9IGZpbmQocGFyW3VdLCBwYXIpCiAgICByZXR1cm4gcGFyW3VdCgpkZWYgdW5pb24odSwgdiwgcGFyLCBzaXplKToKICAgIHVfcm9vdCA9IGZpbmQodSwgcGFyKQogICAgdl9yb290ID0gZmluZCh2LCBwYXIpCgogICAgaWYgdV9yb290ID09IHZfcm9vdDoKICAgICAgICByZXR1cm4gCgoKICAgIGlmIHNpemVbdV9yb290XSA8IHNpemVbdl9yb290XToKICAgICAgICBwYXJbdV9yb290XSA9IHZfcm9vdAogICAgICAgIHNpemVbdl9yb290XSArPSBzaXplW3Vfcm9vdF0KICAgIGVsc2U6CiAgICAgICAgcGFyW3Zfcm9vdF0gPSB1X3Jvb3QKICAgICAgICBzaXplW3Vfcm9vdF0gKz0gc2l6ZVt2X3Jvb3RdCgpkZWYgaXAoKToKICAgIHJldHVybiBtYXAoaW50LGlucHV0KCkuc3BsaXQoKSkKCgoKClQ9MQojIFQ9aW50KGlucHV0KCkpCmZvciBfXyBpbiByYW5nZShUKToKICAgICMgbj1pbnQoaW5wdXQoKSkKICAgIG4sbT1pcCgpCiAgICBhPWxpc3QoaXAoKSkKCiAgICBhLnNvcnQoKQogICAgCiAgICB4PVswIGZvciBfIGluIHJhbmdlKG0pXQogICAgcmVzPVtdCiAgICBjdXJyPTAKCiAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICByPWklbQogICAgICAgIHJlcy5hcHBlbmQoY3VycithW2ldK3hbcl0pCiAgICAgICAgeFtyXSs9YVtpXQogICAgICAgIGN1cnI9cmVzWy0xXQogICAgCiAgICBwcmludCgqcmVzKQoKICAgICAgICAgICAgCgoKICAgIAoKCgo=