|Second Test, Cape Town (day three)|
|England 629-6 dec: Stokes 258, Bairstow 150*|
|South Africa 353-3: Amla 157*, De Villiers 88, Du Plessis 51*|
|South Africa trail by 276 runs|
Hashim Amla's unbeaten 157 helped South Africa frustrate England, who took only one wicket on day three of the second Test in Cape Town.
The Proteas captain batted through the day to lead the hosts to 353-3, trailing by 276.
Dropped on 76 and 120, Amla added 183 with AB de Villiers, who fell for 88 to Steven Finn shortly before tea.
Faf du Plessis ended the day on 51, having helped Amla add an unbroken 85 for the fourth wicket.
South Africa, who trail 1-0 in the four-match series, require a further 77 to avoid the follow-on at Newlands, where the past six Tests have produced a positive result.
Day two saw 453 runs scored, the most in a day of Test cricket in South Africa, yet the hosts - resuming on 141-2 - added only 212 on Monday in reply to England's 629-6 declared.
From brutal Stokes to patient Amla
Amla's elegant and stoic style was markedly different to the fearless hitting of Ben Stokes and Jonny Bairstow on Sunday, but proved effective as South Africa continued their defiant response.
After being reprieved by James Anderson off Joe Root's off-spin, Amla punished England in the steely manner of old to reach his first century in more than a year.
In reaching 50, De Villiers went past 8,000 Test runs as he and Amla put on South Africa's first century stand since 2014.
Having scored 251 runs in eight Tests at an average of 22.81 in 2015, he went past 150 for the seventh time in his career.
Amla scored only three runs in 40 balls after bringing up the landmark, while Du Plessis played watchfully as England toiled in hot conditions.
Careless catching costs England
The part-time off-spin of Root drew Amla, on 76, into a rare flashing drive, but Anderson could not hold on to a sharp chance at slip.
The Proteas skipper was also put down on 120 by a diving Nick Compton at backward point off Finn, England's third drop of the match after Root reprieved De Villiers on Sunday evening.
"England dropped catches which at this level should have been taken," former England captain Michael Vaughan said on BBC Test Match Special.
"If they had taken them they would have been in a really strong position."
England looked threatening with the new ball before tea, Finn bowling with pace and bounce to have De Villiers caught via a mistimed pull to a juggling Anderson at square-leg.
England could not sustain the pressure, though, and the decision to throw the ball to opening batsman and part-time spinner Alex Hales late in the day was indicative of their struggles on a lifeless wicket.
BBC cricket correspondent Jonathan Agnew
"It was not a great watch but Test cricket is all about playing the situation. South Africa were tremendous; they showed an awful lot of character.
"England dropped catches and half-chances which, in situations like this, are what win games. If you drop both De Villiers and Amla you are effectively saying you can double your average.
"Steven Finn was the pick of the bowlers. He really had De Villiers hopping around, ran in well at good pace and was outstanding in conditions not giving him very much.
"The problem for England now is that they have some tired bowlers. Even when they bowl South Africa out, whenever that may be, will they have the energy left to do anything on the last day if the opportunity arises?"
'Don't blame the England captain' - what they said
Former England batsman Geoffrey Boycott on Test Match Special: "Alastair Cook tried everything: unorthodox fielding placings and he tried Alex Hales and Joe Root. What else can the lad do? Don't blame the captain of England. He couldn't do any more.
"It's not over but England need to bowl them out by lunch so they've a smidgen of a chance of winning."
Former England captain Michael Vaughan: "It was a really good day for South Africa, in particular a captain that has been under pressure. Amla occupied the crease with a presence we have seen for so many years."
The stats you may have missed
- Amla went past 7,000 runs in his 90th Test
- The Proteas captain has faced 293 dot balls in his 371-ball innings
- De Villiers became only the third South African to score 8,000 Test runs, after Jacques Kallis and Graeme Smith
- South Africa reached 300 for the first time in seven Tests
- Hales, who bowled three overs for two runs, has taken three first-class wickets at 57 - the first of which was England wicketkeeper Jonny Bairstow