#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int t; // 总共用的骨牌数量
int board[256][256];
void ChessBoard(int tr,int tc,int dr,int dc,int size)
{
if(size==1) return; // 棋盘只有一个方格,且是特殊方格
int s,t1; // s 为划分的子棋盘大小,t1为本次覆盖所用的L型骨牌编号
t1 == ++t; // 本次所用的L型骨牌编号
s = size/2; // 划分棋盘
if(dr<tr+s && dc<tc+s){ // 特殊方格在左上角子棋盘中
ChessBoard(tr,tc,dr,dc,s); // 递归处理左上角子棋盘
}
else{
board[tr-1+s][tc-1+s] = t1; // 填充此次骨牌的一部分
ChessBoard(tr,tc,tr-1+s,tc-1+s,s); //递归处理
}
if(dr<tr+s && dc>=tc+s){ // 特殊方格在右上角子棋盘中
ChessBoard(tr,tc+s,dr,dc,s); // 递归处理右上角子棋盘
}
else{
board[tr-1+s][tc+s] = t1; // 填充此次骨牌的一部分
ChessBoard(tr,tc+s,tr-1+s,tc+s,s); //递归处理
}
if(dr>=tr+s && dc<tc+s){ // 特殊方格在左下角子棋盘中
ChessBoard(tr+s,tc,dr,dc,s); // 递归处理左下角子棋盘
}
else{
board[tr+s][tc-1+s] = t1; // 填充此次骨牌的一部分
ChessBoard(tr+s,tc,tr+s,tc-1+s,s); //递归处理
}
if(dr>=tr+s && dc>=tc+s){ // 特殊方格在右下角子棋盘中
ChessBoard(tr+s,tc+s,dr,dc,s); // 递归处理右下角子棋盘
}
else{
board[tr+s][tc+s] = t1; // 填充此次骨牌的一部分
ChessBoard(tr+s,tc+s,tr+s,tc+s,s); //递归处理
}
}
int main()
{
int tr,tc,dr,dc,size;
cin>>tr>>tc>>dr>>dc>>size;
ChessBoard(tr,tc,dr,dc,size);
cout<<t<<endl;
return 0;
}