#!/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 = [[10**9]*(n+1) for _ in range(max_columns)]
    assert len(sizes) >= mid
    results[0][0] = 0
    for i in range(min(n, mid)):
        results[0][i+1] = max(results[0][i], sizes[i])

    for col in range(1, max_columns):
        results[col][0] = 0
        for j in range(n):
            cv = 0
            for gap in range(mid):
                if j - gap < 0: break
                if sizes[j-gap] > cv: 
                    cv = sizes[j-gap]
                if results[col][j+1] > cv + results[col-1][j-gap]:
                    results[col][j+1] = cv + results[col-1][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
            col_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))])
