Here's one way:
>> p = 9;
>> startrow = find(A(:, 3) == p, 1); % first row where 3rd column entry is p
>> A1 = A(startrow:end, :)
A1 =
7 8 9
2 3 4
3 4 5
1 6 8
Edit:
With multiple entries of p in the last column, you can vary how find is used. For example, if you want to start at the last p instead of the first, you could run
>> startrow = find(A(:, 3) == p, 1, 'last'); % last row where 3rd column entry is p
If you want the second from first, you'd need a little more work:
>> startrows = find(A(:, 3) == p, 2); % first two rows where 3rd column entry is p
>> startrow = startrows(end); % Just the second row where 3rd column entry is p
Also, you probably need error checking if there is the possibility that p never appears in the array, or doesn't appear at least two times (for the last example).