```python
from typing import List

def match_at(grid: List[List[int]], row: int, column: int, value: int) -> bool:
    if len(grid) == 0 or len(grid[0]) == 0:
        raise ValueError("Invalid grid")
    return grid[row][column] == value

def grid_find(grid: List[List[int]], value: int) -> List[int]:
    for i in range(len(grid)):
        for j in range(len(grid[i])):
            if match_at(grid, i, j, value):
                return [i, j]
    raise ValueError("Value not found")
```