/*
TASK: hop
LANG: C++
*/

#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <cstdlib>
#define MAX 2048
#define INF 64000000


using namespace std;

FILE *in; FILE *out;
int n, m;
int a[MAX][MAX];
int b[MAX][MAX];
vector < pair <int, int> > p;
int q[MAX*MAX][3]; int cnt;
int vis[MAX][MAX];


int valid(int x, int y)
{
if (x < 0 || y < 0) return 0;
if (x > n || y > m) return 0;
if (vis[x][y]) return 0;

return 1;
}


void bfs(int x, int y, int r)
{
int i, c;
int cx, cy, cm;
int hor, ver;

p.clear(); memset(vis, 0, sizeof(vis));
for (i=0; i<MAX; i++) for (c=0; c<MAX; c++) a[i][c] = INF;

for (i=0; i<r; i++) for (c=i; c<=r; c++) if (i*i + c*c == r*r) p.push_back(make_pair(i, c));

q[0][0] = x; q[0][1] = y; q[0][2] = 0; cnt = 1;
vis[x][y] = 1; a[x][y] = 0;

for (i=0; i<cnt; i++)
    {
    cx = q[i][0]; cy = q[i][1]; cm = q[i][2];
    a[cx][cy] = cm;
    
    for (c=0; c<(int)p.size(); c++)
        {
        hor = p[c].first; ver = p[c].second;
        
        if (valid(cx - hor, cy - ver))
           {
           vis[cx-hor][cy-ver] = 1;
           q[cnt][0] = cx-hor; q[cnt][1] = cy-ver; q[cnt][2] = cm+1; cnt++;
           }
        if (valid(cx + hor, cy - ver))
           {
           vis[cx+hor][cy-ver] = 1;
           q[cnt][0] = cx+hor; q[cnt][1] = cy-ver; q[cnt][2] = cm+1; cnt++;
           }
        if (valid(cx - hor, cy + ver))
           {
           vis[cx-hor][cy+ver] = 1;
           q[cnt][0] = cx-hor; q[cnt][1] = cy+ver; q[cnt][2] = cm+1; cnt++;
           }
        if (valid(cx + hor, cy + ver))
           {
           vis[cx+hor][cy+ver] = 1;
           q[cnt][0] = cx+hor; q[cnt][1] = cy+ver; q[cnt][2] = cm+1; cnt++;
           }        
        
        hor = p[c].second; ver = p[c].first;
        if (valid(cx - hor, cy - ver))
           {
           vis[cx-hor][cy-ver] = 1;
           q[cnt][0] = cx-hor; q[cnt][1] = cy-ver; q[cnt][2] = cm+1; cnt++;
           }
        if (valid(cx + hor, cy - ver))
           {
           vis[cx+hor][cy-ver] = 1;
           q[cnt][0] = cx+hor; q[cnt][1] = cy-ver; q[cnt][2] = cm+1; cnt++;
           }
        if (valid(cx - hor, cy + ver))
           {
           vis[cx-hor][cy+ver] = 1;
           q[cnt][0] = cx-hor; q[cnt][1] = cy+ver; q[cnt][2] = cm+1; cnt++;
           }
        if (valid(cx + hor, cy + ver))
           {
           vis[cx+hor][cy+ver] = 1;
           q[cnt][0] = cx+hor; q[cnt][1] = cy+ver; q[cnt][2] = cm+1; cnt++;
           }        
        }
    }

return;
}


int main(void)
{
int i, c;
int mx, ans;
int x, y, r;

in = fopen("hop.in", "rt"); out = fopen("hop.out", "wt");
//in = stdin; out = stdout;

fscanf(in, "%d %d", &n, &m); mx = n; if (m > mx) mx = m;

fscanf(in, "%d %d %d", &x, &y, &r);
bfs(x, y, r);

for (i=0; i<MAX; i++) for (c=0; c<MAX; c++) b[i][c] = a[i][c];

fscanf(in, "%d %d %d", &x, &y, &r);
bfs(x, y, r);

ans = INF+INF;
for (i=0; i<=n; i++) for (c=0; c<=m; c++) if (a[i][c] + b[i][c] < ans) ans = a[i][c] + b[i][c];
if (ans >= INF) fprintf(out, "0\n");
else fprintf(out, "%d\n", ans);

//system("pause");
fclose(in); fclose(out);

return 0;
}
