#include <any>
#include <cstdlib>
#include <iostream>
#include <utility>
using namespace std;
// corner case : 一者已经在终点--> bool arrive
// dis(pos1,dst)=dis(pos2,dst)->true
// 考虑同行情况,如果两者都在第一行,A近B远,对B做阻挡是无意义的,因此AB之间不会有障碍,对A做阻挡,同样也是对B的阻挡,因此总不行
// 考虑不同行情况,分三种,第二行的列大、等、小
// 第二行的列数也大,最多卡一次,因为卡一次后第二行需要上移,之后如果再卡,对原本第一行的也会阻挡,因此可行的情况是y2==y1+1,并且可以阻挡(y2+1!=n)
// 第二行的列数和第一行的相等,由于第二行更近,需要卡第二行的,但是一卡就落后了(到了第一行的已经走过的路径),因此不行
// 第二行的列数比第一行的小,如果dis相等就可以,如果dis不等,那么需要卡第一行的,但是第一行本来就需要下移,卡第二行会对第二行也阻挡,因此不行
    int n, x1, y1, x2, y2;
bool arrive(int x,int y){
    return x==2&&y==n;
}

bool solve() {
    cin >> n >> x1 >> y1 >> x2 >> y2;
    int dis1 = llabs(x1 - 2) + llabs(y1 - n);
    int dis2 = llabs(x2 - 2) + llabs(y2 - n);
    if(dis1==dis2)return true;
    if(arrive(x1,y1)||arrive(x2,y2)) return false;
    if(x1==x2)return false;
    if(y1>y2){
        swap(y1, y2);
        swap(x1,x2);
    }
    if(y2==y1+1&&y2+1!=n)return true;

    return false;    
}
int main() {
    cout << (solve() ? "YES" : "NO");
}
// 64 位输出请用 printf("%lld")