void main(){
	int[] atox;
	int cnt;
	foreach(i; 0..4)atox ~= _scan();
	for(int an; an<=atox[0]; an++){
		for(int bn; bn<=atox[1]; bn++){
			for(int cn; cn<=atox[2]; cn++){
				if(500*an+100*bn+50*cn==atox[3])cnt++;
			}
		}
	}
	cnt.writeln();
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string, std.math;

// 1要素のみの入力
T _scan(T= int)(){
	return to!(T)( readln().chomp() );
}

// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}
