#include<stdio.h>
#include<stdlib.h>

#define NEREALIZOVANO 48
#define REALIZOVANO 49

typedef unsigned long broj;

int main()
{
	broj r, s, p, d, i, j, temp, max;
	double k;
	broj *t, *c;
	broj *dobit,*realizacija;
	broj *ploce;
	char *status;
	
	//ulaz
	scanf("%ld%lf%ld",&r,&k,&p);
	
	s = (broj)(k * r);	
	
	t = (broj*)malloc(p * sizeof(broj));
	c = (broj*)malloc(p * sizeof(broj));
	
	ploce = (broj*)malloc(p * sizeof(broj));
	
	for(i = 0; i < p; i++)
	{
		scanf("%ld%ld", &t[i], &c[i]);
		ploce[i] = 0;
	}
	
	//obrada
	realizacija = (broj*)malloc((s + 1) * sizeof(broj));
	dobit = (broj*)malloc((s + 1) * sizeof(broj));
	status = (char*)malloc((s + 1) * sizeof(char));
	
	for(i = 0; i < (s + 1); i++)
	{
		status[i] = NEREALIZOVANO;
		realizacija[i] = dobit[i] = 0;
	}
	
	max = 0;
	status[0] = REALIZOVANO;
	
	for(i = 0; i < (s + 1); i++)
		for(j = 0; j < p; j++)
			if((t[j] <= i) && (status[i - t[j]] != NEREALIZOVANO))
			{
				if(status[i] == NEREALIZOVANO)
				{
					dobit[i] = c[j] + dobit[i - t[j]];
					realizacija[i] = j;
					status[i] = REALIZOVANO;
					if(dobit[i] > dobit[max]) max = i;
				}
				else
				{
					if((c[j] + dobit[i - t[j]]) > dobit[i])
						{
							dobit[i] = c[j] + dobit[i - t[j]];
							realizacija[i] = j;
							if(dobit[i] > dobit[max]) max = i;
						}
				}
			}
	
	//izlaz
	
	printf("%ld\n",dobit[max]);

	while(max > 0)
	{
		ploce[realizacija[max]]++;
		max = max - t[realizacija[max]];
	}
	
	for(i = 0; i < p; i++)
		printf("%ld\n", ploce[i]);
	
	free(status);
	free(ploce);
	free(realizacija);
	free(dobit);
	free(t);
	free(c);
	
	return 0;
}
