std::vector reallocation invalidation

Which iterators/references are guaranteed valid after v.push_back(4) in this code?

std::vector<int> v = {1, 2, 3};
auto it = v.begin();
int& ref = v[0];
v.push_back(4);
A

it is valid but ref is not

B

Both it and ref are valid

C

ref is valid but it is not

D

Neither it nor ref is guaranteed valid