Ok so I found a working solution, but it's very unclean I guess:
When I start my activity A1 inside the activity X0, I give the type of the activity X0 as a string (using flag).
Intent newActivity = new Intent(this, typeof(A1));
newActivity.PutExtra("endActivity", typeof(X0).Name);
StartActivity(newActivity);
On activity A1, I get the flag like this:
string endActivityType = Intent.GetStringExtra("endActivity");
Then when I start the activity A2 and A3 I keep giving the type of X0 as a string using flag:
Intent newActivity = new Intent(this, typeof(A2));
newActivity.PutExtra("endActivity", endActivityType);
StartActivity(newActivity);
And once I want to go back to X0 inside my activity A3, I do:
Type typeX0 = Type.GetType("MyAppNamespace." + endActivityType);
Intent intent = new Intent(this, typeX0);
intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
StartActivity(intent);
as Kashish said.