Centurion: Quinton de Kock's maiden Test century put South Africa in command of the final Test as England closed day two in Centurion 337 runs behind at 138-2.
The 23-year-old, in his eighth Test, was dropped three times but reached an entertaining hundred from 104 balls.
England claimed two wickets in five balls early on but left-hander De Kock shared in stands of 50 and 82 and was unbeaten on 129 as his team made 475.
In reply Alex Hales fell cheaply but Alastair Cook held firm with 67.
South Africa resumed on 329-5 with De Kock on 29 and added a very useful 146 runs in 42 overs before they were finally all out midway through the afternoon session.
Their fast bowler Kagiso Rabada claimed two early wickets, trapping Nick Compton for 19 with one that pitched halfway down the wicket but hit barely above the boots, and dismissals of that nature will give them hope of a consolation victory after conceding the series with defeats at Durban and Johannesburg.
Brief scores
South Africa - 475 (de Kock 129*, Cook 115, Amla 109, Stokes 4-86)
England - 138 for 2 (Cook 67*)
Status - England trail by 337 runs