Why does the game think my "or's" are "and's"?

JASS:
private function Actions takes nothing returns nothing
local player p = GetOwningPlayer(GetTriggerUnit())
local integer t = GetUnitTypeId(GetSpellTargetUnit())
local integer id = GetPlayerId(p)
if GetUnitTypeId(Second_Unit[id]) != t or GetUnitTypeId(Third_Unit[id]) != t or GetUnitTypeId(Fourth_Unit[id]) != t then
set Unit[GetPlayerId(p)] = CreateUnit(p, t, 500., 0, bj_UNIT_FACING)
call UnitRemoveAbility(GetTriggerUnit(), 'A00H')
else
call SimError(p, "Cannot choose the same hero twice.")
endif
call BJDebugMsg(I2S(t)+" =? "+I2S(GetUnitTypeId(Second_Unit[id])))
call BJDebugMsg(I2S(t)+" =? "+I2S(GetUnitTypeId(Third_Unit[id])))
call BJDebugMsg(I2S(t)+" =? "+I2S(GetUnitTypeId(Fourth_Unit[id])))
endfunction
The Condition returns true, unless all 3 of them are false.