how to use $wpdb->prepare to update a custom table

When you look at the Codex article on $wpdb, then you will see that your current usage is correct. The last argument

array( '%s', '%d', '%s' )

already indicates that there is something like sprintf/printf going on in the background.

The $wpdb->prepare() method isn’t needed for every other method. The ones that need it:

$wpdb->query()
$wpdb->get_var()
$wpdb->get_col()
$wpdb->get_row()
$wpdb->get_results()

and plain SQL queries like:

$sqlQuery = $wpdb->prepare( "SELECT etc.", /* list of replacements */ );

where the last probably will always get wrapped inside $wpdb->query() anyway.