#!/bin/python3
n, w = [int(x) for x in input().split()]
l = [input() for _ in range(n)]
sizes = [len(w) + 1 for w in l]

lo = 0
hi = n + 1

last_mid_result = None
last_mid_columns = None

while hi - lo > 1:
    mid = (hi + lo)//2
    max_columns = 2*n//mid + 1

    # results[i][j]: using columns up to i, and words < j, gives this minimal width.
    # or -1 if that is not possible.
    results = [[0]]
    for v in sizes[:mid]:
        results[0].append(max(results[0][-1], v))
    for _ in range(n - mid):
        results[0].append(10**9)

    for col in range(1, max_columns):
        results.append([0])
        for j in range(n):
            # ending this column at j.
            cv = 0
            results[-1].append(10**9)
            for gap in range(mid):
                if j - gap < 0: continue
                cv = max(cv, sizes[j-gap])
                if results[-1][-1] > cv + results[-2][j-gap]:
                    results[-1][-1] = cv + results[-2][j-gap]

    for i in range(max_columns):
        if results[i][n] <= w + 1:
            hi = mid
            last_mid_result = results
            break
    else:
        lo = mid
        continue


# This reconstruction code is not going to win a prize for legibility.
results = last_mid_result
column_sizes = []
for i in range(max_columns):
    if results[i][n] <= w + 1:
        cur_width = results[i][n]
        cur_idx = n - 1
        col_idx = i - 1
        while cur_width:
            col_length = 1
            cv = sizes[cur_idx]
            while cv + results[col_idx][cur_idx] != cur_width:
                cur_idx -= 1
                cv = max(cv, sizes[cur_idx])
                col_length += 1
            cur_idx -= 1
            cur_width -= cv
            column_sizes.append(col_length)
        break
column_sizes = list(reversed(column_sizes))
l = list(reversed(l))
print_word_list = []
for size in column_sizes:
    print_word_list.append([])
    for _ in range(size):
        print_word_list[-1].append(l.pop())
    for _ in range(hi-size):
        print_word_list[-1].append("")
    longest_width = max([len(w) for w in print_word_list[-1]])
    print_word_list[-1] = [w + " "*(longest_width - len(w)) for w in print_word_list[-1]]

print(hi, len(print_word_list))
print(*[len(l[0]) for l in print_word_list])
for i in range(hi):
    print(*[print_word_list[x][i] for x in range(len(print_word_list))])
