balance cannot be lower than 0
functions that give/take balances returns the new balacne