```python
import psutil
import curses
import time

def draw_progress_bar(stdscr, progress, total, height, width, y, x):
    """Draw a progress bar on the screen."""
    bar_length = width - 2  # Length of the bar excluding brackets
    filled_length = int(bar_length * progress // total)
    bar = f"[{'=' * filled_length}{' ' * (bar_length - filled_length)}]"
    stdscr.addstr(y, x, bar)

def benchmark_ram(stdscr, target_usage):
    allocated_memory = []
    total_allocated = 0
    stdscr.nodelay(1)  # Make getch() non-blocking
    stdscr.clear()

    while True:
        # Get current RAM usage and CPU usage
        current_memory = psutil.virtual_memory()
        current_usage = current_memory.percent
        total_memory = current_memory.total / (1024 ** 3)  # Convert bytes to GB
        used_memory = total_memory * current_usage / 100  # Calculate used memory in GB

        current_cpu_usage = psutil.cpu_percent()

        # Update RAM allocation
        if current_usage < target_usage:
            try:
                # Allocate 100 MB
                allocated_memory.append(bytearray(100 * 1024 * 1024))  # 100 MB
                total_allocated += 0.1  # Track total allocated in GB
                allocation_progress = total_allocated * 100 / (total_memory - used_memory)
            except MemoryError:
                stdscr.addstr(1, 0, "Memory allocation failed. Check your RAM usage.")
                stdscr.refresh()
                break
            except KeyboardInterrupt:
                print("Exited.")
        else:
            stdscr.addstr(1, 0, "Target RAM usage reached. Press 'Ctrl+C' to exit.")
            stdscr.refresh()
            stdscr.getch()  # Wait for user input
            break

        # Clear the screen and draw the UI
        stdscr.clear()

        # Display RAM usage
        draw_progress_bar(stdscr, used_memory, total_memory, height=1, width=30, y=0, x=0)
        stdscr.addstr(0, 35, f"{used_memory:.1f}/{total_memory:.1f} GB - {current_usage:.1f}% used")

        # Display RAM allocation progress
        draw_progress_bar(stdscr, total_allocated, total_memory, height=1, width=30, y=1, x=0)
        stdscr.addstr(1, 35, f"Allocating {total_allocated:.1f} GB RAM, {allocation_progress:.1f}% done")

        # Display CPU usage
        draw_progress_bar(stdscr, current_cpu_usage, 100, height=1, width=30, y=2, x=0)
        stdscr.addstr(2, 35, f"{current_cpu_usage:.1f}% CPU usage")

        stdscr.addstr(4, 0, "Press 'Ctrl+C' to quit.")
        stdscr.refresh()

        time.sleep(0.5)  # Delay before the next update

if __name__ == "__main__":
    target_usage = 95
    curses.wrapper(benchmark_ram, target_usage)
```
New UI:
initial: 
              RAM Filler
                   > [start]
                   > settings 
                   > quit

control with arrow keys
filling:
[+-+                                              3%                                                             ]  allocation progress
[+-+-+ 50% -+            ] RAM usage 
[+-+     10%                   ] CPU usage
press C to go back, Ctrl+C to quit

settings:
                          > fill usage: [95%]
                          > display unit: [percent] GB
                          > quit on system slowdown (RAM=99%): [yes] no

control with arrow keys