{
TASK:capital
LANG:PASCAL
}
program capital;

const
	MAXN						= 10000;
	MAXM						= 4;
	INF						= 100000001;

type
	TNeighbour					= record
		ind					: Integer;
		len					: LongInt;
	end;

var
	neigh						: Array [1 .. MAXN, 1 .. MAXM] of TNeighbour;
	dist						: Array [1 .. MAXN] of LongInt;
	used						: Array [1 .. MAXN] of Boolean;
	m						: Array [1 .. MAXN] of Integer;
	n, k						: Integer;

procedure readInput;
var
	a, b, i						: Integer;
	c						: LongInt;
begin
	readln(n, k);
	for i := 1 to n do
		m[i] := 0;
	while (True) do begin
		readln(a, b, c);
		if (a = 0) then break;
		m[a] := m[a] + 1;
		neigh[a, m[a]].ind := b;
		neigh[a, m[a]].len := c;
		m[b] := m[b] + 1;
		neigh[b, m[b]].ind := a;
		neigh[b, m[b]].len := c;
	end;
end;

procedure Solve;
var
	c, ind_min, i, j				: Integer;
	min						: LongInt;
begin
	for i := 1 to n do begin
		used[i] := False;
		dist[i] := INF;
	end;
	dist[1] := 0;
	i := 0;
	while (i < n) do begin
		min := INF+1;
		for j := 1 to n do
			if (not used[j]) and (dist[j] < min) then begin
				min := dist[j];
				ind_min := j;
			end;
		if (min > k) then break;
		c := ind_min;
		used[c] := True;
		for j := 1 to m[c] do
			if (dist[c] + neigh[c, j].len < dist[neigh[c, j].ind]) then
				dist[neigh[c, j].ind] := dist[c] + neigh[c, j].len;
		i := i + 1;
	end;
	writeln(n-i);	
end;

begin
	readInput;
	Solve;
end.
