To determine which transactions must be rolled back, we identify the data dependencies (dirty reads) caused by uncommitted updates:
Transaction operations in order:
R1(X): T1 reads X.
W1(Y): T1 writes item Y.
R2(X): T2 reads item X.
R2(Y): T2 reads item Y, which was updated by T1. Since T1 has not yet committed, this is a dirty read (a dependency T1→T2).
R3(Y): T3 reads item Y, which was updated by T1. This is also a dirty read (a dependency T1→T3).
ABORT(T1): T1 fails and aborts.
Cascading Rollback:
Since T1 aborts, all transactions that have read uncommitted data written by T1 must also be rolled back to maintain consistency.
Both T2 and T3 performed dirty reads on data item Y written by T1.
Therefore, both T2 and T3 must be rolled back (cascading abort).
Hence, the correct option is C (Both T2 and T3).