def METHOD_NAME(raw: str) -> Dict[str, List[str]]:
    """Parses a raw cookie string into a dictionary.
    The function takes a raw cookie string (usually from HTTP headers) and
    returns a dictionary where each key is a cookie name and the value is a
    list of values for that cookie. The function handles quoted values and
    skips invalid cookie names.
    Args:
        raw (str): The raw cookie string to be parsed.
    Returns:
        Dict[str, List[str]]: A dictionary containing the cookie names as keys
        and a list of values for each cookie.
    Example:
        ```python
        raw = 'name1=value1; name2="value2"; name3=value3'
        cookies = parse_cookie(raw)
        # cookies will be {'name1': ['value1'], 'name2': ['value2'], 'name3': ['value3']}
        ```
    """  # noqa: E501
    cookies: Dict[str, List[str]] = {}
    for token in raw.split(";"):
        name, __, value = token.partition("=")
        name = name.strip()
        value = value.strip()
        if not name:
            continue
        if COOKIE_NAME_RESERVED_CHARS.search(name):  # no cov
            continue
        if len(value) > 2 and value[0] == '"' and value[-1] == '"':  # no cov
            value = _unquote(value)
        if name in cookies:
            cookies[name].append(value)
        else:
            cookies[name] = [value]
    return cookies