#include <iostream>
#include <vector>
#include <complex>
#include <cmath>
#include <algorithm>
using namespace std;

//XY座標
#define X real()
#define Y imag()

// 許容する誤差ε
const double EPS = (1e-10);
// 円周率
const double PI = 3.14159265358979;

// 点の表現
typedef complex<double> P;

// complex<double> の順序を定義する
namespace std {
	bool operator < (const P& a, const P& b) {
		return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
	}
}

// 2乗する
double sq(double x){
	return x * x;
}

// 2つのスカラーが等しいかどうか
bool equal(double a, double b){
	return ( fabs( a - b ) < EPS );
}
// 2つのベクトルが等しいかどうか
bool eq_v(P a, P b){
	return ( equal( a.X, b.X ) && equal( a.Y, b.Y ) );
}

// 線, 線分, 直線の表現 (これの使い道がまだ不明である !!!)
struct Line{ P pos, dir; };
// [案]
// 直線 => Line 型
// 半直線 => Ray 型
// 線分 => Segment 型

// 多角形の表現 (使わない可能性あり !!!)
typedef vector<P> G;

// 円の表現
struct Circle{
	// 円の中心
	P p;
	// 円の半径
	double r;
	// コンストラクタで初期化
	Circle(P p_, double r_){
		p = p_;
		r = r_;
	}
	// 3 点を通る円 (まだ書いてない !!! )
	Circle(P a, P b, P c){
		;
	}
	// 円の面積
	double get_area(){
		return r * r * PI;
	}
	// 円周
	double circumference(){
		return 2.0 * r * PI;
	}
	// 点 a が円の内部にあるかどうか (未検証 ??? )
	bool is_inside(P a){
		// 点 a と円の中心 p との距離が 円の半径 r 以下であるかどうか
		return ( abs(sq( p.X - a.X ) + sq( p.Y - a.Y ) - r*r) < EPS );
	}
	// 点 a が円周上にあるかどうか (未検証 ??? )
	bool on_boundary(P a){
		return equal( sq( p.X - a.X ) + sq( p.Y - a.Y ) , r * r );
	}
	// 2 つの円の共通接線を返す (まだ書いてない !!!)
	// 2 つの円が離れている => 共通接線は 4 つ
	// 2 つの円が外接する   => 共通接線は 3 つ
	// 2 つの円が交わる     => 共通接線は 2 つ
	// 2 つの円が内接する    => 共通接線は 1 つ
	// 2 つの円のどちらかが内包する => 共通接線は 0 つ
	vector<Line> hoge_2(const Circle& cir){
		;
	}
	// 2 つの円の交わる点を返す (まだ書いてない !!!)
	// 2 つの円が離れている・内包する => 接点は 0 つ
	// 2 つの円が外接 or 内接する   => 接点は 1 つ
	// 2 つの円が交わる            => 接点は 2 つ
	vector<P> intersection(const Circle& cir){
		;
	}
	// 円と直線の交点を返す (まだ書いてない !!!)
	vector<P> intersection(const Line& l){
	}
	// 任意の弦の長さを返す (まだ書いてない !!!)
	
	// 円のパラメータの表示 (デバッグ用)
	void print(){
		cout << "circle : r = " << r << " p = (" << p.X << "," << p.Y << ")" << endl;
	}
};

// 三角形の表現
struct Triangle{
private:
	// 余弦定理から 3 つの角の角度を求める (内部の関数で使用)
    double LawOfCosines(double a, double b, double c){
        return acos( (b*b + c*c - a*a) / (2.0 * b * c) );
    }
    // ラジアンから度数へ変換して返す
    double to_degree(double radian){
    	return radian * 180.0 / PI;
    }
public:
	// 3 つの頂点
	P a, b, c;
    // 3 つの辺の長さ
    double edgeA, edgeB, edgeC;
    // 3 つの角の角度 (ラジアン)
    double angleA,angleB,angleC;
    
    // コンストラクタで初期化
    Triangle(P p1, P p2, P p3){
        a = p1;
        b = p2;
        c = p3;
        edgeB = abs(c-a);
        edgeA = abs(b-c);
        edgeC = abs(a-b);
        angleA = LawOfCosines( edgeA, edgeB, edgeC );
        angleB = LawOfCosines( edgeB, edgeC, edgeA );
        angleC = LawOfCosines( edgeC, edgeA, edgeB );
    }
    // 三角形の面積を返す (ヘロンの公式)
	double get_area(){
		double s = 0.5 * (edgeA + edgeB + edgeC);
		return sqrt( s * (s - edgeA) * (s - edgeB) * (s - edgeC) );
	}
	// 三角形の重心を返す
	P gravity(){
		P g( (a.X + b.X + c.X) / 3.0 , (a.Y + b.Y + c.Y) / 3.0 );
		return g;
	}
    // 三角形の外接円を返す
    Circle circumscribed_circle(){
		double r = ( edgeA / sin(angleA) / 2.0 );
		double A = sin( 2.0 * angleA );
		double B = sin( 2.0 * angleB );
		double C = sin( 2.0 * angleC );
		double cx = ( (a.X * A + b.X * B + c.X * C) / (A+B+C) );
		double cy = ( (a.Y * A + b.Y * B + c.Y * C) / (A+B+C) );
		Circle cir( P(cx,cy) , r );
		return cir;
	}
	// 三角形の内接円を返す (未検証 ???)
	Circle inscribed_circle(){
		// 三角形の外周の長さ
		double ABC = edgeA + edgeB + edgeC;
		
		double cx = (a.X * edgeA + b.X * edgeB + c.X * edgeC) / ABC;
		double cy = (a.Y * edgeA + b.Y * edgeB + c.Y * edgeC) / ABC;
		double r  = (2.0 * get_area()) / ABC ;
		Circle cir( P(cx,cy) , r );
		return cir;
	}
	// 点 p が三角形の内部にあるかどうか (まだ書いてない !!! AOJ 0012 にあります)
	// 点 p が三角形の辺上にあるときは誤差で正しい結果が返ってこないので注意!!!
	bool is_inside(P p){
		Triangle tri1( a , b , p );
		Triangle tri2( b , c , p );
		Triangle tri3( c , a , p );
		// 角APB + 角BPB + 角CPA が 360度なら 点 p は三角形の内部にある
		return equal( tri1.angleC + tri2.angleC + tri3.angleC , 2.0*PI );
	}
	// 点 p が三角形の辺上にあるかどうか (まだ書いてない !!!)
	bool on_boundary(P p){
		;
	}
	// 三角形のパラメータの表示 (デバッグ用)
	void print(){
		cout << "[triangle] : " << endl;
		cout << "a = (" << a.X << "," << a.Y << ") ";
		cout << "b = (" << b.X << "," << b.Y << ") ";
		cout << "c = (" << c.X << "," << c.Y << ") " << endl;
		cout << "AB = " << edgeC << " BC = " << edgeA << " CA = " << edgeB << endl;
		cout << "A = " << to_degree( angleA ) << " ";
		cout << "B = " << to_degree( angleB ) << " ";
		cout << "C = " << to_degree( angleC ) << endl;
	}
};

// 多角形の表現
struct Polygon{
	// 頂点の集まり
	vector<P> g;
	// コンストラクタで初期化
	Polygon(vector<P> vp){
		g = vp;
	}
	// 点 p が多角形の内部にあるかどうか (まだ書いてない !!!)
	bool is_inside(P p){
		;
	}
	// 点 p が多角形の辺上にあるかどうか
	bool on_boundary(P p){
	}
	// 直線 l と多角形の交点を返す (まだ書いてない !!!)
	vector<P> itersection(Line l){
		;
	}
	// 凸多角形かどうか (まだ書いてない !!!)
	bool is_convex(){
		;
	}
	// 多角形の面積を返す (まだ書いてない !!!)
	double get_area(){
		;
	}
};

// 2 点間の距離
double dis(P a, P b){
	return sqrt( sq( a.real()-b.real() ) + sq( a.imag()-b.imag() ) );
}

// ベクトルaの単位ベクトルを求める
P unit(P a){
	return a / abs(a);
}

// ベクトルaの法線ベクトルを求める
vector<P> normal(P a){
	vector<P> vp;
	vp.push_back( a * P(0,  1) );
	vp.push_back( a * P(0, -1) );
	return vp;
}

// ベクトル a の単位法線ベクトルを求める
vector<P> normal_unit(P a){
	vector<P> vp;
	vp.push_back( (a * P(0,  1)) / abs(a) );
	vp.push_back( (a * P(0, -1)) / abs(a) ) ;
	return vp;
}

// 内積 (dot product) : a・b = |a||b|cosΘ
double dot(P a, P b) {
	return (a.real() * b.real() + a.imag() * b.imag());
}

// 外積 (cross product) : a×b = |a||b|sinΘ
double cross(P a, P b) {
    return (a.real() * b.imag() - a.imag() * b.real());
}

// 2 直線の直交判定 : a⊥b <=> dot(a, b) = 0
int is_orthogonal(P a1, P a2, P b1, P b2) {
	return equal( dot(a1-a2, b1-b2), 0.0 );
}

// 2 直線の平行判定 : a//b <=> cross(a, b) = 0
int is_parallel(P a1, P a2, P b1, P b2) {
	return equal( cross(a1-a2, b1-b2), 0.0 );
}

// 点 c が直線 a, b 上にあるかどうか 
int is_point_on_line(P a, P b, P c) {
	return equal( cross(b-a, c-a), 0.0 );
}

// 下記は (1) より (2) のほうが簡潔で良い.

// 点 c が線分 a, b 上にあるかどうか (1)
int is_point_on_line_1(P a, P b, P c) {
  return equal( cross(b-a, c-a), 0.0 ) &&
         (dot(b-a, c-a) > -EPS) &&
         (dot(a-b, c-b) > -EPS);
}

// 点 c が線分 a, b 上にあるかないか(2)
int is_point_on_line_2(P a, P b, P c) {
	// |a-c| + |c-b| <= |a-b| なら線分上
	return (abs(a-c) + abs(c-b) < abs(a-b) + EPS);
}

// 点 a, bを通る直線と点 c との距離
double distance_l_p(P a, P b, P c) {
	return abs(cross(b-a, c-a)) / abs(b-a);
}

// 点 a, b を端点とする線分と点 c との距離
double distance_ls_p(P a, P b, P c) {
	if( dot(b-a, c-a) < EPS ) return abs(c-a);
	if( dot(a-b, c-b) < EPS ) return abs(c-b);
	return abs(cross(b-a, c-a)) / abs(b-a);
}

// a1, a2 を端点とする線分と b1, b2 を端点とする線分の交差判定
int is_intersected_ls(P a1, P a2, P b1, P b2) {
	return ( cross(a2-a1, b1-a1) * cross(a2-a1, b2-a1) < EPS ) &&
		   ( cross(b2-b1, a1-b1) * cross(b2-b1, a2-b1) < EPS );
}

// a1, a2 を端点とする線分と b1, b2 を端点とする線分の交点計算
P intersection_ls(P a1, P a2, P b1, P b2) {
	P b = b2-b1;
	double d1 = abs(cross(b, a1-b1));
	double d2 = abs(cross(b, a2-b1));
	double t = d1 / (d1 + d2);
	
	return a1 + (a2-a1) * t;
}

// a1, a2 を通る直線と b1, b2 を通る直線の交差判定
int is_intersected_l(P a1, P a2, P b1, P b2) {
	return !equal( cross(a1-a2, b1-b2), 0.0 );
}

// a1, a2 を通る直線と b1, b2 を通る直線の交点計算
P intersection_l(P a1, P a2, P b1, P b2) {
	P a = a2 - a1; P b = b2 - b1;
	return a1 + a * cross(b, b1-a1) / cross(b, a);
}

// 2 つの円の共通面積を求める (未検証 ???)
double cc_area(const Circle& c1, const Circle& c2) {
    double d = abs(c1.p - c2.p);
    if( c1.r + c2.r <= d + EPS ){
        return 0.0;
    }else if( d <= abs(c1.r - c2.r) + EPS ){
        double r = min( c1.r , c2.r ); // ここが怪しい ???
        return r * r * PI;
    }else{
        double rc = ( d * d + c1.r * c1.r - c2.r * c2.r) / ( 2.0 * d );
        double theta = acos( rc / c1.r );
        double phi = acos((d - rc) / c2.r);
        return c1.r * c1.r * theta + c2.r * c2.r * phi - d * c1.r * sin(theta);
    }
}

// 
void debug_p(P p){
	cout << "(" << p.X << "," << p.Y << ")" << endl;
}

int main(){
	double x1,y1,x2,y2,x3,y3,px,py;
	while( cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> px >> py ){
		P p(px,py);
		P a(x1,y1);
		P b(x2,y2);
		P c(x3,y3);
		Triangle tri( a, b, c );
		if( tri.is_inside( p ) )
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}
}

Measured memory_bytes: 0