#include <stdio.h>
#include <math.h>
FILE *inp, *outp;
int nPrimes;
int prime[500];
int generate_table(int prime[])
{
  int j;
  prime[0] = 1;
  prime[1] = 2;
  prime[2] = 3;
  nPrimes = 3;
  for (j = 5; j <= 1000; j += 2)
  {
    int i;
    for (i = 2; prime[i]*prime[i] <= j; ++i)
    {
      if (j % prime[i] == 0)
	break;
    }
    if (prime[i]*prime[i] >j)
      prime[nPrimes++] = j;
  }
  prime[nPrimes] = 1001;
  return 0;
}

int is_prime(int i)
{
   int j;
   for (j = 0; prime[j] <= i; ++j)
     if (prime[j] == i) return 1;
   return 0;
}

int how_many_prime(int top)
{ int i;
  for (i = 0; prime[i] <= top; ++i)
  ;
  return i;
}

void print_cut(int top, int size)
{ int i;

	int count = how_many_prime(top);
	fprintf(outp, "%d %d: ", top, size);
	if (count % 2 == 1)
	{
	  int middle = (count-1)/2;
	  int j;
	  if (2*size-1 > count)
	     size = (count+1)/2;
	  for (j = middle-size+1; j <= middle+size-1; ++j)
	    fprintf(outp, "%d ", prime[j]);
	}
	else
	{
	  int middle = count/2;
	  int j;
	  if (2*size-1 > count)
	     size = count/2;
	  for (j = middle-size; j < middle+size; ++j)
	     fprintf(outp, "%d ", prime[j]);
	}

	fprintf(outp,"\n\n");
}

void main(void)
{	int  top, size, i;
	generate_table(prime);
	inp=fopen("CUTS.IN","r");
	outp=fopen("CUTS.OUT","w");
	fscanf(inp, "%d %d", &top, &size);
	while (!feof(inp))
	{
		print_cut(top, size);
		fscanf(inp, "%d %d", &top, &size);
	}
	fclose(inp);
	fclose(outp);
}
