Centuries from openers Quinton de Kock and Hashim Amla guided South Africa to a seven-wicket victory over England on Tuesday that kept alive their hopes of winning the five-match series of one-day internationals.
Joe Root made a sparkling 125 as England, after winning the toss and electing to bat, piled up 318 for eight in 50 overs.
De Kock (135) and Amla (127) then amassed 239 for the first wicket to lay the platform before South Africa reached the target with 22 balls to spare to cut their series deficit to 2-1.
England, seeking to become the first touring team to win a test and ODI series in South Africa for 14 years, now bid to clinch overall victory in Johannesburg on Friday.
De Kock, 23, was particularly brutal as he became the youngest player to record 10 ODI hundreds. He also made an unbeaten ton in the first game in Bloemfontein.
Amla cut and pulled his way to a 22nd ODI century, and third in a row at Centurion Park.
Earlier, Root eased to his seventh ODI century with a masterful display of power and placement, hitting 10 fours and five sixes.
Root added 125 for the second wicket with opener Alex Hales (65) and 82 for the fifth with Ben Stokes (53) before being run out following a calamitous mix-up with the latter.
Paceman Kyle Abbott took two for 50 and was the only South African bowler to keep his economy rate under six an over.