```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 len(selector) == 0:
        raise ValueError("selector must be a non-empty string")
    if not all(len(term.split('-')) == 1 or len(term.split('-')) == 2 for term in selector.split(',')):
        raise ValueError("selector terms must be either a single non-negative integer or two of them joined by a hyphen")
    
    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
```