Craig, Descalso lead Cardinals over Astros 4-3