What is the output of the following code, and why?

[Update: By “why“, I mean “what part of the C# spec controls this behavior?“]

class Test
{
  public static void Main()
  {
    int z = 2;
    z += ++z+5*z++;
    System.Console.WriteLine("Yak! {0}", z);
  }
}

What about this code?

class Test
{
  public static void Main()
  {
    int z = 2;
    z += (5*z++)+(++z);
    System.Console.WriteLine("Yak! {0}", z);
  }
}

Extra credit: What is the defined output for C++, and why?