Houston Astros hold on for 4-3 win over St. Louis