#include <bits/stdc++.h>
using namespace std;

const int OFFSET = 1020;
const int MAXN = 2050;

int di[8] = {-1,-1,0,0,2,2,3,3};
int dj[8] = {-1,1,-2,2,-2,2,-1,1};

int dx[]={1,-1,-2,2,-2,2,-1,1};
int dy[]={2,2,1,1,-1,-1,-2,-2};

int dd[MAXN][MAXN];

void push_node(queue<pair<int,int>> &q, int u, int v, int d) {
    if (u < -1010 || v < -1010 || u > 1010 || v > 1010) return;
    if (dd[u + OFFSET][v + OFFSET]) return;

    dd[u + OFFSET][v + OFFSET] = d;
    q.push({u, v});
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int mx, my, tx, ty, firstMove;
    cin >> mx >> my >> tx >> ty >> firstMove;

    queue<pair<int,int>> q;

    // init
    if (firstMove == 1) {
        push_node(q, mx, my, 1);
    } else {
        for (int i = 0; i < 8; i++)
            push_node(q, mx + dx[i], my + dy[i], 2);
    }

    // BFS
    while (!q.empty()) {
        auto [u, v] = q.front(); q.pop();
        int d = dd[u + OFFSET][v + OFFSET];

        for (int i = 0; i < 8; i++) {
            int uu = u + di[i];
            int vv = v + dj[i];

            if (uu == tx && vv == ty) {
                cout << "YES\n" << d << '\n';
                return 0;
            }

            push_node(q, uu, vv, d + 1);
        }
    }

    cout << "NO\n";
}
