How to construct a grammar that generates language L?
One possible grammar is: $G = (N, \Sigma, P, S)$, 
where

$N = \{S,U,V\}$

$\Sigma = \{a,b,c\}$

$P = \{
  S \to baUV,
  U \to ab|bUc,
  V \to a|aV
\}$

The key observation here is breaking $bab^nabc^na^p$ into 3 parts, $ba$, $b^nabc^n$, and $a^p$, one fixed, one growing bidirectionally, and one simple repeatition. Express the growing patterns first, then merge them along with the fixed parts.