#!/usr/bin/env python3
import sys
from collections import Counter


def is_subseq(x, y):
    it = iter(y)
    return all(c in it for c in x)


n, weight_per_bucket = map(int, input().split())
ws = list(map(int, input().split()))

hammers = sum(w // weight_per_bucket - (w % weight_per_bucket == 0) for w in ws)
stones_left = Counter([w % weight_per_bucket for w in ws if w % weight_per_bucket != 0])

# print(stones_left, file=sys.stderr)

splits_of_size = [set(), {(1,)}]
for size in range(2, weight_per_bucket * (weight_per_bucket - 1) + 1):
    splits = set()
    for i in range(1, min(weight_per_bucket, size + 1)):
        if size == i:
            splits.add((i,))
        else:
            [splits.add(tuple(sorted((i, *s), reverse=True))) for s in splits_of_size[size - i]]
    splits_of_size.append(splits)
    # TODO: as speedup, splits_of_size[8,16,24,...] should only contain tuples that cannot be split with lower round splits
    # round_split = splits_of_size[(size - 1) // weight_per_bucket * weight_per_bucket]
    # splits_of_size.append({s for s in splits if not (round_split and is_subseq(round_split, s))})

# print({i: len(s) for i, s in enumerate(splits_of_size)}, file=sys.stderr)
# print(len({tuple(sorted((*a, *b), reverse=True)) for a in splits_of_size[8] for b in splits_of_size[8]}), file=sys.stderr)

# print(sorted(splits_of_size[weight_per_bucket * 2], reverse=True), file=sys.stderr)
# print(sorted({tuple(sorted((*a, *b), reverse=True)) for a in splits_of_size[8] for b in splits_of_size[8]}, reverse=True), file=sys.stderr)

for size in range(weight_per_bucket, weight_per_bucket ** 2, weight_per_bucket):
    for splits in sorted(splits_of_size[size], reverse=True):
        counter = Counter(splits)
        m = min(stones_left[k] // v for k, v in counter.items())
        if m:
            for k, v in counter.items(): stones_left[k] -= m * v
            hammers += m * (size // weight_per_bucket - 1)
            # print(m, size, weight_per_bucket, counter, hammers, file=sys.stderr)
    if not any(stones_left.values()): break

print(hammers)
