To create a test case generator for the given problem, we need to generate random values for the parameters \( H \), \( W \), \( K \), and the grid \( S \). Here's the Python code that generates such test cases:

```python
import random

def tcgen():
    H = random.randint(1, 10)
    W = random.randint(1, 1000)
    K = random.randint(1, H * W)
    
    S = []
    for i in range(H):
        row = ''.join(random.choice(['0', '1']) for _ in range(W))
        S.append(row)
    
    return H, W, K, S

def print_test_case():
    H, W, K, S = tcgen()
    
    print(H, W, K)
    for row in S:
        print(row)

# To generate and print a test case
print_test_case()
```

### Explanation:

1. **Random Values Generation**:
   - `H` is chosen randomly between 1 and 10.
   - `W` is chosen randomly between 1 and 1000.
   - `K` is chosen randomly between 1 and \( H \times W \).

2. **Grid Generation**:
   - The grid \( S \) is generated by creating a list of strings, where each string represents a row of the grid.
   - Each character in the row is either '0' (dark square) or '1' (white square), randomly chosen.

3. **Output**:
   - The function `print_test_case()` prints the generated test case in the required format.

You can call `print_test_case()` to generate and print a test case. This will help in generating multiple test cases for thorough testing of your solution.