import java.util.Scanner;
import java.util.Objects;
import java.util.Arrays;

public class Main {

  public static void main(String[] args) {

    final Scanner scanner = new Scanner(System.in);

    final int N = scanner.nextInt();
    PlanEntry[] plan = new PlanEntry[N + 1];
    plan[0] = new PlanEntry(0, 0, 0);

    for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    }

    for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    }
    System.out.println("Yes");

  }
  public static boolean canTravel(final PlanEntry from, final PlanEntry to) {
    // distance
    final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY());
    if (dist > to.getTime() - from.getTime()) {
      return false;
    }
    // position
    return to.getTime() % 2 == (to.getX() + to.getY()) % 2;
  }

}
class PlanEntry {

  private int time;
  private int x;
  private int y;
  public PlanEntry(final int time, final int x, final int y) {
    this.time = time;
    this.x = x;
    this.y = y;
  }
  public int getTime() {
    return this.time;
  }
  public int getX() {
    return this.x;
  }
  public int getY() {
    return this.y;
  }
  @Override
  public String toString() {
    return "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]";
  }
  @Override
  public boolean equals(final Object object) {
    if (object == null) {
      return false;
    }
    if (object == this) {
      return true;
    }
    if (!(object instanceof PlanEntry)) {
      return false;
    }
    final PlanEntry other = (PlanEntry) object;
    return Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y);
  }
  @Override
  public int hashCode() {
    return Objects.hash(this.time, this.x, this.y);
  }

} import java.util.Scanner; Scanner java.util import java.util.Objects; Objects java.util import java.util.Arrays; Arrays java.util public class Main {

  public static void main(String[] args) {

    final Scanner scanner = new Scanner(System.in);

    final int N = scanner.nextInt();
    PlanEntry[] plan = new PlanEntry[N + 1];
    plan[0] = new PlanEntry(0, 0, 0);

    for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    }

    for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    }
    System.out.println("Yes");

  }
  public static boolean canTravel(final PlanEntry from, final PlanEntry to) {
    // distance
    final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY());
    if (dist > to.getTime() - from.getTime()) {
      return false;
    }
    // position
    return to.getTime() % 2 == (to.getX() + to.getY()) % 2;
  }

} Main public static void main(String[] args) {

    final Scanner scanner = new Scanner(System.in);

    final int N = scanner.nextInt();
    PlanEntry[] plan = new PlanEntry[N + 1];
    plan[0] = new PlanEntry(0, 0, 0);

    for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    }

    for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    }
    System.out.println("Yes");

  } main {

    final Scanner scanner = new Scanner(System.in);

    final int N = scanner.nextInt();
    PlanEntry[] plan = new PlanEntry[N + 1];
    plan[0] = new PlanEntry(0, 0, 0);

    for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    }

    for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    }
    System.out.println("Yes");

  } final Scanner scanner = new Scanner(System.in); scanner new Scanner(System.in) final int N = scanner.nextInt(); N scanner.nextInt() scanner.nextInt scanner PlanEntry[] plan = new PlanEntry[N + 1]; plan new PlanEntry[N + 1] N + 1 N 1 plan[0] = new PlanEntry(0, 0, 0) plan[0] plan 0 new PlanEntry(0, 0, 0) for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    } int i = 1; int i = 1; i 1 i <= N i N i++ i++ i {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    } {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    } plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()) plan[i] plan i new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()) for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    } {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    } if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      } !canTravel(plan[i], plan[i + 1]) canTravel(plan[i], plan[i + 1]) canTravel plan[i] plan i plan[i + 1] plan i + 1 i 1 {
        System.out.println("No");
        return;
      } System.out.println("No") System.out.println System.out System System.out "No" return; System.out.println("Yes") System.out.println System.out System System.out "Yes" String[] args args public static boolean canTravel(final PlanEntry from, final PlanEntry to) {
    // distance
    final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY());
    if (dist > to.getTime() - from.getTime()) {
      return false;
    }
    // position
    return to.getTime() % 2 == (to.getX() + to.getY()) % 2;
  } canTravel {
    // distance
    final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY());
    if (dist > to.getTime() - from.getTime()) {
      return false;
    }
    // position
    return to.getTime() % 2 == (to.getX() + to.getY()) % 2;
  } final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY()); dist Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY()) Math.abs(from.getX() - to.getX()) Math.abs Math from.getX() - to.getX() from.getX() from.getX from to.getX() to.getX to Math.abs(from.getY() - to.getY()) Math.abs Math from.getY() - to.getY() from.getY() from.getY from to.getY() to.getY to if (dist > to.getTime() - from.getTime()) {
      return false;
    } dist > to.getTime() - from.getTime() dist to.getTime() - from.getTime() to.getTime() to.getTime to from.getTime() from.getTime from {
      return false;
    } return false; false return to.getTime() % 2 == (to.getX() + to.getY()) % 2; to.getTime() % 2 == (to.getX() + to.getY()) % 2 to.getTime() % 2 to.getTime() to.getTime to 2 (to.getX() + to.getY()) % 2 (to.getX() + to.getY()) to.getX() to.getX to to.getY() to.getY to 2 final PlanEntry from from final PlanEntry to to class PlanEntry {

  private int time;
  private int x;
  private int y;
  public PlanEntry(final int time, final int x, final int y) {
    this.time = time;
    this.x = x;
    this.y = y;
  }
  public int getTime() {
    return this.time;
  }
  public int getX() {
    return this.x;
  }
  public int getY() {
    return this.y;
  }
  @Override
  public String toString() {
    return "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]";
  }
  @Override
  public boolean equals(final Object object) {
    if (object == null) {
      return false;
    }
    if (object == this) {
      return true;
    }
    if (!(object instanceof PlanEntry)) {
      return false;
    }
    final PlanEntry other = (PlanEntry) object;
    return Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y);
  }
  @Override
  public int hashCode() {
    return Objects.hash(this.time, this.x, this.y);
  }

} PlanEntry private int time; time private int x; x private int y; y public PlanEntry(final int time, final int x, final int y) {
    this.time = time;
    this.x = x;
    this.y = y;
  } PlanEntry {
    this.time = time;
    this.x = x;
    this.y = y;
  } this.time = time this.time this this.time time this.x = x this.x this this.x x this.y = y this.y this this.y y final int time time final int x x final int y y public int getTime() {
    return this.time;
  } getTime {
    return this.time;
  } return this.time; this.time this this.time public int getX() {
    return this.x;
  } getX {
    return this.x;
  } return this.x; this.x this this.x public int getY() {
    return this.y;
  } getY {
    return this.y;
  } return this.y; this.y this this.y @Override
  public String toString() {
    return "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]";
  } toString {
    return "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]";
  } return "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]"; "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]" this.y ", y = " this.x ", x = " "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]" "PlanEntry [time = " this.time this this.time ", x = " this.x this this.x ", y = " this.y this this.y "]" @Override
  public boolean equals(final Object object) {
    if (object == null) {
      return false;
    }
    if (object == this) {
      return true;
    }
    if (!(object instanceof PlanEntry)) {
      return false;
    }
    final PlanEntry other = (PlanEntry) object;
    return Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y);
  } equals {
    if (object == null) {
      return false;
    }
    if (object == this) {
      return true;
    }
    if (!(object instanceof PlanEntry)) {
      return false;
    }
    final PlanEntry other = (PlanEntry) object;
    return Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y);
  } if (object == null) {
      return false;
    } object == null object null {
      return false;
    } return false; false if (object == this) {
      return true;
    } object == this object this {
      return true;
    } return true; true if (!(object instanceof PlanEntry)) {
      return false;
    } !(object instanceof PlanEntry) (object instanceof PlanEntry) object PlanEntry {
      return false;
    } return false; false final PlanEntry other = (PlanEntry) object; other (PlanEntry) object return Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y); Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y) Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y) Objects.equals(this.time, other.time) Objects.equals Objects this.time this this.time other.time other other.time Objects.equals(this.x, other.x) Objects.equals Objects this.x this this.x other.x other other.x Objects.equals(this.y, other.y) Objects.equals Objects this.y this this.y other.y other other.y final Object object object @Override
  public int hashCode() {
    return Objects.hash(this.time, this.x, this.y);
  } hashCode {
    return Objects.hash(this.time, this.x, this.y);
  } return Objects.hash(this.time, this.x, this.y); Objects.hash(this.time, this.x, this.y) Objects.hash Objects this.time this this.time this.x this this.x this.y this this.y public class Main {

  public static void main(String[] args) {

    final Scanner scanner = new Scanner(System.in);

    final int N = scanner.nextInt();
    PlanEntry[] plan = new PlanEntry[N + 1];
    plan[0] = new PlanEntry(0, 0, 0);

    for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    }

    for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    }
    System.out.println("Yes");

  }
  public static boolean canTravel(final PlanEntry from, final PlanEntry to) {
    // distance
    final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY());
    if (dist > to.getTime() - from.getTime()) {
      return false;
    }
    // position
    return to.getTime() % 2 == (to.getX() + to.getY()) % 2;
  }

} public class Main {

  public static void main(String[] args) {

    final Scanner scanner = new Scanner(System.in);

    final int N = scanner.nextInt();
    PlanEntry[] plan = new PlanEntry[N + 1];
    plan[0] = new PlanEntry(0, 0, 0);

    for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    }

    for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    }
    System.out.println("Yes");

  }
  public static boolean canTravel(final PlanEntry from, final PlanEntry to) {
    // distance
    final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY());
    if (dist > to.getTime() - from.getTime()) {
      return false;
    }
    // position
    return to.getTime() % 2 == (to.getX() + to.getY()) % 2;
  }

} Main
import java.util.Scanner;
import java.util.Objects;
import java.util.Arrays;

public class Main {

  public static void main(String[] args) {

    final Scanner scanner = new Scanner(System.in);

    final int N = scanner.nextInt();
    PlanEntry[] plan = new PlanEntry[N + 1];
    plan[0] = new PlanEntry(0, 0, 0);

    for (int i = 1; i <= N; i++) {
      plan[i] = new PlanEntry(scanner.nextInt(), scanner.nextInt(), scanner.nextInt());
    }

    for (int i = 0; i < N; i++) {
      if (!canTravel(plan[i], plan[i + 1])) {
        System.out.println("No");
        return;
      }
    }
    System.out.println("Yes");

  }
  public static boolean canTravel(final PlanEntry from, final PlanEntry to) {
    // distance
    final int dist = Math.abs(from.getX() - to.getX())
        + Math.abs(from.getY() - to.getY());
    if (dist > to.getTime() - from.getTime()) {
      return false;
    }
    // position
    return to.getTime() % 2 == (to.getX() + to.getY()) % 2;
  }

}
class PlanEntry {

  private int time;
  private int x;
  private int y;
  public PlanEntry(final int time, final int x, final int y) {
    this.time = time;
    this.x = x;
    this.y = y;
  }
  public int getTime() {
    return this.time;
  }
  public int getX() {
    return this.x;
  }
  public int getY() {
    return this.y;
  }
  @Override
  public String toString() {
    return "PlanEntry [time = " + this.time + ", x = " + this.x + ", y = " + this.y + "]";
  }
  @Override
  public boolean equals(final Object object) {
    if (object == null) {
      return false;
    }
    if (object == this) {
      return true;
    }
    if (!(object instanceof PlanEntry)) {
      return false;
    }
    final PlanEntry other = (PlanEntry) object;
    return Objects.equals(this.time, other.time)
        && Objects.equals(this.x, other.x)
        && Objects.equals(this.y, other.y);
  }
  @Override
  public int hashCode() {
    return Objects.hash(this.time, this.x, this.y);
  }

}
