<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def encipher_vigenere(plaintext, plain_vocab, key):
 """Encrypt plain text with given key. Args: plaintext (list of list of Strings):
 a list of plain text to encrypt. plain_vocab (list of Integer):
 unique vocabularies being used. key (list of Integer):
 key to encrypt cipher using Vigenere table. Returns: ciphertext (list of Strings):
 encrypted plain text. """

  ciphertext = []
  # generate Vigenere table
  layers = [
      ShiftEncryptionLayer(plain_vocab, i) for i in range(len(plain_vocab))
  ]

  for i, sentence in enumerate(plaintext):
    cipher_sentence = []
    for j, character in enumerate(sentence):
      key_idx = key[j % len(key)]
      encrypted_char = layers[key_idx].encrypt_character(character)
      cipher_sentence.append(encrypted_char)
    ciphertext.append(cipher_sentence)

  return ciphertext