```ts
/**
 * Selects dishes that do not exceed the given budget, sorted by price and name.
 * @param dishes - Array of dish objects with name and price properties.
 * @param budget - Maximum total cost in pence for selected dishes.
 * @returns An array of dish names that fit within the budget, ordered by price and name.
 */
export function menuPick(dishes: { name: string; price: number }[], budget: number): string[] {
    if (budget < 0) throw new Error("Budget cannot be negative");

    return dishes
        .filter(dish => dish.price <= budget)
        .sort((a, b) => a.price - b.price || a.name.localeCompare(b.name))
        .map(dish => dish.name);
}
```