```python
from typing import List, Dict, Tuple

class ReservationResult:
    def __init__(self, picks: List[Tuple[int, int, int]], short: List[Tuple[int, int]]):
        self.picks = picks
        self.short = short

def reserve_lots(lots: List[Tuple[int, str, int]], orders: List[Tuple[int, int]]) -> ReservationResult:
    lots.sort(key=lambda x: (x[1], x[0]))  # Sort by use-by date, then lot id
    picks = []
    short = []

    for order_id, units_wanted in orders:
        if units_wanted == 0:
            continue

        for lot_id, use_by_date, units_on_hand in lots:
            if units_on_hand > 0:
                take = min(units_wanted, units_on_hand)
                picks.append((order_id, lot_id, take))
                units_wanted -= take
                units_on_hand -= take

                if units_wanted == 0:
                    break

        if units_wanted > 0:
            short.append((order_id, units_wanted))

    return ReservationResult(picks, short)
```