if budget is not enough, return False