#include <cstdlib>
#include <cstdio>

const int MaxN = 100010;
const int MaxDivNum = 1010;

int n, k, s, divNum, groupCount, sol;
int a[MaxN], b[MaxN], divisors[MaxDivNum];

int main()
{
	FILE* inFile = fopen("nzd.in", "r");
	FILE* outFile = fopen("nzd.out", "w");

	fscanf(inFile, "%d%d", &n, &k);
	s = 0;
	for (int i = 0; i < n; i++)
	{
		fscanf(inFile, "%d", &a[i]);
		s += a[i];
	}
	
	divNum = 0;  // nalazimo sve delioce sume
	for (int i = 1; i <= s; i++)
	{
		if (s % i == 0)
			divisors[divNum++] = i;
	}

	for (int j = divNum - 1; j >= 0; j--)
	{
		sol = divisors[j]; // proveravamo da li j-ti delilac moze biti NZD
		groupCount = 0;
		for (int i = 0; i < n; i++) 
			b[i] = 0;

		for (int i = 0; i < n; i++)  // pravimo uzastopne grupe, prelazimo
		{							 // na sledecu cim je suma deljiva sa sol
			b[groupCount] += a[i];
			if (b[groupCount] % sol == 0)
			{
				groupCount++;
			}
		}

		if (groupCount >= k)  // ako je broj grupa dovoljno veliki
		{
			break;
		}
	}

	// "spajamo" visak grupa u k-tu
	for (int i = k; i < groupCount; i++)
	{
		b[k - 1] += b[i];
	}

	fprintf(outFile, "%d\n", sol);
	for (int i = 0; i < k - 1; i++)
		fprintf(outFile, "%d ", b[i]);
	fprintf(outFile, "%d\n", b[k - 1]);

	fclose(inFile);
	fclose(outFile);
	return 0;
}
