McKesson agrees to $350 million settlement