Functional languages like Haskell work around the principle of no side effect, which means operations don’t affect the state of the system(variables). Basically, variables are immutable in pure functional languages. They are declarative in the sense that we specify what we want just like we define recursive functions or expressions.
Logic languages like Prolog work on predicate logic and inference rules is widely used and thus are declarative. So it is like proving some theorems based on arguments given.
Object Oriented languages like Java work on classes, which are nothing but implementations of abstract data types(ADT). They are imperative(procedural) in nature as we have methods(functions) to step-by-step show our actions.
Imperative languages like C are procedural in nature, where we have to specify how we want to take steps, and give commands through function calls like doSomething(), moveRight(100) etc.
So, option (D) is obvious.