input: 
  from typing import List, Callable
  
  
  def compute_3_layer_neural_network(input_values: List[float], hidden_weights: List[List[float]], output_weights: List[float], activation_function: Callable[[List[float]], List[float]]) -> float:
      """ Computes the output of a 3-layer neural network using given input values, 
      hidden layer weights, and output layer weights. The activation function is applied 
      to the output of the hidden layer.
      >>> compute_3_layer_neural_network([2, 3], [[0.1, 0.4], [0.8, 0.6], [0.3, 0.9]], [0.3, 0.7], lambda x: x)
      5.279999999999999
      """
      # Compute the output of the hidden layer
      hidden_layer_output = activation_function([sum([input_values[i] * hidden_weights[i][j] for i in range(len(input_values))]) for j in range(len(hidden_weights[0]))])
      # Compute the output of the network
      output = sum([hidden_layer_output[i] * output_weights[i] for i in range(len(hidden_layer_output))])
      return output
  
output:     # Compute the output of the hidden layer
      hidden_layer_output = activation_function([sum([input_values[i] * hidden_weights[i][j] for i in range(len(input_values))]) for j in range(len(hidden_weights[0]))])
      # Compute the output of the network
      output = sum([hidden_layer_output[i] * output_weights[i] for i in range(len(hidden_layer_output))])
      return output