Published: 2017-08-05 22:17:05 BdST
England lead the series 2-1 and are looking to secure their first home series win over South Africa since 1998.
In response, South Africa lost opener Dean Elgar for a duck, trapped leg before by Jimmy Anderson, with his third ball from the newly named 'Jimmy Anderson End' to go into lunch at 12-1.
The tourists had made quick progress in the morning session picking up three early wickets to have England at 312 for nine.
But Bairstow, playing some beautiful strokes, put on a 50-run partnership with last man Anderson - with 46 of those runs coming from Bairstow.
The Yorkshireman, who had been dropped by wicketkeeper Quinton de Kock on 53, fell just one short of his fourth Test century, ruled lbw after attempting to sweep spinner Keshav Maharaj.
Seamer Kagiso Rabada finished with figure of 4-91.
Nightwatchman Toby Roland-Jones was first to go on Saturday - his attempt to drive Rabada snaffled up by Temba Bavuma at point and then Moeen Ali (14) edged the seamer to Faf du Plessis at second slip.
Stuart Broad was emphatically clean bowled by Morne Morkel for seven runs before Anderson and Bairstow took England to a good first innings total.