import core.bitop;
import std.algorithm;
import std.ascii;
import std.bigint;
import std.conv;
import std.functional;
import std.math;
import std.numeric;
import std.range;
import std.stdio;
import std.string;
import std.random;

T lread(T = long)()
{
    return readln.chomp.to!T();
}

T[] aryread(T = long)()
{
    return readln.split.to!(T[])();
}

alias sread = () => readln.chomp();

void main()
{
    long A = lread();
    long B = lread();
    long C = lread();
    long X = lread();

    long i;
    foreach (a; 0 .. A + 1)
        foreach (b; 0 .. B + 1)
            foreach (c; 0 .. C + 1)
                if ((a * 500 + b * 100 + c * 50) == X)
                {
                    i++;
                }
    i.writeln();
}
