How to change team when leaderstats hit a certain range

I am trying to create a script for an obby that changes a players team depending on their stage value. I modified another script for team changing via leaderstats value but it is not working. I need the players team to change to the correct team for that value range both when they join the game and when their leaderstats value changes. (my scripting skills are extremely limited so it is probably a really basic problem but I cannot find any other solution for my specific issue.)

The script:

local Teams = game:GetService("Teams")

local Team1 = Instance.new("Team", Teams)
Team1.Name = "Section 1"
Team1.AutoAssignable = true
Team1.TeamColor = BrickColor.new("Crimson")

local Team2 = Instance.new("Team", Teams)
Team2.Name = "Section 2"
Team2.AutoAssignable = false
Team2.TeamColor = BrickColor.new("Bright green")

local Team3 = Instance.new("Team", Teams)
Team3.Name = "Section 3"
Team3.AutoAssignable = false
Team3.TeamColor = BrickColor.new("Bright yellow")

local Sec1Range = NumberRange.new(1, 11)
local Sec2Range = NumberRange.new(12, 22)
local Sec3Range = NumberRange.new(23, 23)

--Section 1--
game.Players.PlayerAdded:Connect(function(player)
	local leaderstats = player:WaitForChild("leaderstats")
	local Stage = leaderstats:WaitForChild("Stage")
	Stage:GetPropertyChangedSignal("Value"):connect(function(newValue)
		if newValue <= Sec1Range.Max and newValue >= Sec1Range.Min and player.Team ~= Team1 then
			player.Team = Team1
		end
	end)
end)

--Section 2--
game.Players.PlayerAdded:Connect(function(player)
	local leaderstats = player:WaitForChild("leaderstats")
	local Stage = leaderstats:WaitForChild("Stage")
	Stage:GetPropertyChangedSignal("Value"):connect(function(newValue)
		if newValue <= Sec2Range.Max and newValue >= Sec2Range.Min and player.Team ~= Team2 then
			player.Team = Team2
		end
	end)
end)

--Section 3--
game.Players.PlayerAdded:Connect(function(player)
	local leaderstats = player:WaitForChild("leaderstats")
	local Stage = leaderstats:WaitForChild("Stage")
	Stage:GetPropertyChangedSignal("Value"):connect(function(newValue)
		if newValue <= Sec3Range.Max and newValue >= Sec3Range.Min and player.Team ~= Team3 then
			player.Team = Team3
		end
	end)
end)