while read -r a b c d; do
  if [[ $b = *';'* ]]; then
    IFS=';' read -r -a ba <<<"$b"
    IFS=';' read -r -a ca <<<"$c"
    for idx in "${!ba[@]}"; do
      printf '%s\t%s\t%s\t%s\n' "$a" "${ba[idx]}" "${ca[idx]}" "$d"
    done
  else
    printf '%s\t%s\t%s\t%s\n' "$a" "$b" "$c" "$d"
  fi
done