```python
from typing import List

def selector_hits(values: List[int], selector: str) -> int:
    if not isinstance(values, list) or not all(isinstance(x, int) for x in values):
        raise ValueError("values must be a list of integers")
    if not isinstance(selector, str) or not selector:
        raise ValueError("selector must be a non-empty string")
    if not all(term.isdigit() or '-' in term for term in selector.split(',')):
        raise ValueError("selector must contain only integers and ranges")
    if any(term.count('-') > 1 for term in selector.split(',')):
        raise ValueError("ranges must have exactly one hyphen")
    if any(int(term.split('-')[0]) > int(term.split('-')[1]) for term in selector.split(',')):
        raise ValueError("ranges must have a low end that is less than or equal to the high end")

    count = 0
    for value in values:
        for term in selector.split(','):
            if term.isdigit():
                if int(term) == value:
                    count += 1
                    break
            elif '-' in term:
                low, high = map(int, term.split('-'))
                if low <= value <= high:
                    count += 1
                    break
    return count
```