def METHOD_NAME(source_dir, target_dir, file_selectors, overwrite):
    if not (os.path.isdir(source_dir) and os.path.isdir(target_dir)):
        raise Exception(f"""Invalid path given (Source: {source_dir}, Target: {target_dir}).
        If target is empty, consider creating the empty directory in the desired destination before running the copier.""")
    print(BIG_SECTION)
    print(f"Copying files from {source_dir} to {target_dir}")
    print(SECTION)
    files_to_copy = []
    for file_selector in file_selectors:
        selected_files = glob.glob(os.path.join(source_dir, file_selector))
        print(f"Selector {file_selector} matched with the following files: {selected_files}")
        files_to_copy = files_to_copy + selected_files
    files_to_copy = set(files_to_copy)
    print(SECTION)
    for source_file in files_to_copy:
        file_basename = os.path.basename(source_file)
        target_file = os.path.join(target_dir, file_basename)
        if overwrite or (not os.path.exists(target_file)):
            shutil.copy(source_file, target_file)
            print(f"Copying  {file_basename} from {source_dir} to {target_dir}")
        else:
            print(f"Skipping {file_basename} from {source_dir} since overwriting is not allowed")
        print("\n")