Stokes slammed 258 and Bairstow made 150 not out before England declared on 629 for six. The pair shared a world Test record sixth wicket partnership of 399. Stokes’ score was the highest by a number six batsman in Tests.
Stokes followed up by having South African opening batsman Dean Elgar caught at point as South Africa reached 141 for two at the close, still 488 runs behind.
The left-handed Stokes thrashed 30 fours and 11 sixes in a 197-ball innings. He reached his double century off 163 balls, the second fastest in Tests behind Nathan Astle’s 153-ball effort for New Zealand against England at Christchurch in 2001/02.
He reached 250 with a six off Kagiso Rabada to become the fastest to the mark in Tests, beating Virender Sehwag’s effort for India against Sri Lanka in Mumbai in 2009 by 11 balls.
With a declaration imminent, Stokes pounded the next delivery into the stands for another six before, in trying to hit a third, he skied the ball to AB de Villiers at mid-on. De Villiers dropped it but ran out Stokes with a direct hit to the bowler’s end.
The South African bowlers had no answer to a relentless assault, which started with 45 runs scored off the first four overs of the day, bowled by Morne Morkel and Chris Morris.
The left-handed Stokes needed only 12 balls go from his overnight 74 to his third Test century, which he made off 105 deliveries with 16 fours and a six. He quickly went past his previous highest Test score, 120 against Australia at Perth two seasons ago.
South African captain Hashim Amla was soon forced to place fielders on the boundary on both sides of the wicket but Stokes continued to power the ball past them. By the end of the first hour, which yielded 103 runs off 13 overs, there were five men on the boundary.
The two hours before lunch yielded 196 runs despite South Africa bowling only 25 overs. Stokes’ share was 130 off 74 balls, a new record for individual runs scored before lunch on any day of a Test. He beat the 123 by Leslie Ames for England against South Africa at The Oval in 1935.
Although he was overshadowed by Stokes, Bairstow played a fine innings in registering a maiden Test century off 161 balls. He then followed Stokes’ example by going on an all-out attack to go to 150 off only 30 balls. His innings included 18 fours and two sixes.
South Africa’s malaise was summed up when Morkel dropped Bairstow on 138. The batsman drove Morris to long-off and the ball went through Morkel’s hands. De Villiers, another senior player in a largely inexperienced team, followed suit when he dropped Stokes, although De Villiers made amends by picking up the ball and running out Stokes.
South Africa made a bad start when Stiaan van Zyl pushed James Anderson into the covers and set off for a run. He was sent back by Elgar and Nick Compton?s throw to wicketkeeper Bairstow beat him comfortably.
Elgar made 44 and shared a second wicket partnership of 78 with Amla before Stokes, bowling around the wicket to the left-hander sent down a lifting delivery into the body. Elgar got a leading edge to it and the ball popped up square on the off side, with Compton diving to take the catch.
Amla batted solidly to make 64 not out, his first fifty in 12 Test innings since he made 68 against the West Indies at the same venue a year ago. He and AB de Villiers put on an unbeaten 56 for the third wicket.
De Villiers was dropped on 5 by Joe Root at second slip off James Anderson. He was on 25 not out at the close.