function a = DMS(p,M,A)
	if nargin < 3
		A = 1:numel(p);
	end
	
	% prealloca l'M-messaggio
	a = zeros(1,M);
	
	for m = 1:M
		% un numero casuale tra 0 ed 1
		x = rand;
		
		% il primo test è relativo al primo intervallo
		% thr è l'estremo destro
		i = 1;
		thr = p(1);

		% se x cade nel primo intervallo non si entra nel while
		while x > thr
			% altrimenti si aggiorna la soglia per il prossimo test
			i = i + 1;
			thr = thr + p(i);
		end
		
		% i è l'indice dell'intervallo in cui cade x
		a(m) = A(i);
	end
end
