import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.*;

public class Main {

    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    private static final PrintWriter sysout = new PrintWriter(System.out, false);

    private static StringTokenizer buffer;

    private static String readLine() {
        buffer = null;
        try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static String read() {
        if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        }
        return buffer.nextToken();
    }

    private static int readInt() {
        return Integer.parseInt(read());
    }

    private static int[] readIntArray(int loop) {
        int[] result = new int[loop];
        for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        }
        return result;
    }

    private static int[] splitInt() {
        String[] tmp = read().split("");
        int[] result = new int[tmp.length];
        for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    }

    private static long readLong() {
        return Long.parseLong(read());
    }

    private static double readDouble() {
        return Double.parseDouble(read());
    }

    public static void main(String[] args){
        run();
    }

    private static void run() {
        int gohyaku = readInt();
        int hyaku = readInt();
        int goju = readInt();
        int total = readInt();
        int count = 0;
        for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        }
        System.out.println(count);
    }
} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.io.PrintWriter; PrintWriter java.io import java.util.*; util.* java public class Main {

    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    private static final PrintWriter sysout = new PrintWriter(System.out, false);

    private static StringTokenizer buffer;

    private static String readLine() {
        buffer = null;
        try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static String read() {
        if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        }
        return buffer.nextToken();
    }

    private static int readInt() {
        return Integer.parseInt(read());
    }

    private static int[] readIntArray(int loop) {
        int[] result = new int[loop];
        for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        }
        return result;
    }

    private static int[] splitInt() {
        String[] tmp = read().split("");
        int[] result = new int[tmp.length];
        for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    }

    private static long readLong() {
        return Long.parseLong(read());
    }

    private static double readDouble() {
        return Double.parseDouble(read());
    }

    public static void main(String[] args){
        run();
    }

    private static void run() {
        int gohyaku = readInt();
        int hyaku = readInt();
        int goju = readInt();
        int total = readInt();
        int count = 0;
        for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        }
        System.out.println(count);
    }
} Main private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) private static final PrintWriter sysout = new PrintWriter(System.out, false); sysout new PrintWriter(System.out, false) private static StringTokenizer buffer; buffer private static String readLine() {
        buffer = null;
        try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    } readLine {
        buffer = null;
        try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    } buffer = null buffer null try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } IOException e {
            throw new RuntimeException(e);
        } throw new RuntimeException(e); new RuntimeException(e) {
            return br.readLine();
        } return br.readLine(); br.readLine() br.readLine br private static String read() {
        if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        }
        return buffer.nextToken();
    } read {
        if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        }
        return buffer.nextToken();
    } if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        } buffer == null || !buffer.hasMoreTokens() buffer == null buffer null !buffer.hasMoreTokens() buffer.hasMoreTokens() buffer.hasMoreTokens buffer {
            buffer = new StringTokenizer(readLine());
        } buffer = new StringTokenizer(readLine()) buffer new StringTokenizer(readLine()) return buffer.nextToken(); buffer.nextToken() buffer.nextToken buffer private static int readInt() {
        return Integer.parseInt(read());
    } readInt {
        return Integer.parseInt(read());
    } return Integer.parseInt(read()); Integer.parseInt(read()) Integer.parseInt Integer read() read private static int[] readIntArray(int loop) {
        int[] result = new int[loop];
        for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        }
        return result;
    } readIntArray {
        int[] result = new int[loop];
        for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        }
        return result;
    } int[] result = new int[loop]; result new int[loop] loop for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        } int i = 0; int i = 0; i 0 i < loop i loop i++ i++ i {
            result[i] = readInt();
        } {
            result[i] = readInt();
        } result[i] = readInt() result[i] result i readInt() readInt return result; result int loop loop private static int[] splitInt() {
        String[] tmp = read().split("");
        int[] result = new int[tmp.length];
        for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    } splitInt {
        String[] tmp = read().split("");
        int[] result = new int[tmp.length];
        for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    } String[] tmp = read().split(""); tmp read().split("") read().split read() read "" int[] result = new int[tmp.length]; result new int[tmp.length] tmp.length tmp tmp.length for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        } int i = 0, n = tmp.length; int i = 0 i 0 n = tmp.length; n tmp.length tmp tmp.length i < n i n i++ i++ i {
            result[i] = Integer.parseInt(tmp[i]);
        } {
            result[i] = Integer.parseInt(tmp[i]);
        } result[i] = Integer.parseInt(tmp[i]) result[i] result i Integer.parseInt(tmp[i]) Integer.parseInt Integer tmp[i] tmp i return result; result private static long readLong() {
        return Long.parseLong(read());
    } readLong {
        return Long.parseLong(read());
    } return Long.parseLong(read()); Long.parseLong(read()) Long.parseLong Long read() read private static double readDouble() {
        return Double.parseDouble(read());
    } readDouble {
        return Double.parseDouble(read());
    } return Double.parseDouble(read()); Double.parseDouble(read()) Double.parseDouble Double read() read public static void main(String[] args){
        run();
    } main {
        run();
    } run() run String[] args args private static void run() {
        int gohyaku = readInt();
        int hyaku = readInt();
        int goju = readInt();
        int total = readInt();
        int count = 0;
        for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        }
        System.out.println(count);
    } run {
        int gohyaku = readInt();
        int hyaku = readInt();
        int goju = readInt();
        int total = readInt();
        int count = 0;
        for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        }
        System.out.println(count);
    } int gohyaku = readInt(); gohyaku readInt() readInt int hyaku = readInt(); hyaku readInt() readInt int goju = readInt(); goju readInt() readInt int total = readInt(); total readInt() readInt int count = 0; count 0 for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        } int i = 0; int i = 0; i 0 i <= gohyaku i gohyaku i++ i++ i {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        } {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        } for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            } int j = 0; int j = 0; j 0 j <= hyaku j hyaku j++ j++ j {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            } {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            } for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                } int k = 0; int k = 0; k 0 k <= goju k goju k++ k++ k {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                } {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                } int result = 500*i + 100*j + 50*k; result 500*i + 100*j + 50*k 500*i + 100*j + 50*k 500*i 500 i 100*j 100 j 50*k 50 k if (total == result) count++; total == result total result count++ count System.out.println(count) System.out.println System.out System System.out count public class Main {

    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    private static final PrintWriter sysout = new PrintWriter(System.out, false);

    private static StringTokenizer buffer;

    private static String readLine() {
        buffer = null;
        try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static String read() {
        if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        }
        return buffer.nextToken();
    }

    private static int readInt() {
        return Integer.parseInt(read());
    }

    private static int[] readIntArray(int loop) {
        int[] result = new int[loop];
        for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        }
        return result;
    }

    private static int[] splitInt() {
        String[] tmp = read().split("");
        int[] result = new int[tmp.length];
        for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    }

    private static long readLong() {
        return Long.parseLong(read());
    }

    private static double readDouble() {
        return Double.parseDouble(read());
    }

    public static void main(String[] args){
        run();
    }

    private static void run() {
        int gohyaku = readInt();
        int hyaku = readInt();
        int goju = readInt();
        int total = readInt();
        int count = 0;
        for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        }
        System.out.println(count);
    }
} public class Main {

    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    private static final PrintWriter sysout = new PrintWriter(System.out, false);

    private static StringTokenizer buffer;

    private static String readLine() {
        buffer = null;
        try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static String read() {
        if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        }
        return buffer.nextToken();
    }

    private static int readInt() {
        return Integer.parseInt(read());
    }

    private static int[] readIntArray(int loop) {
        int[] result = new int[loop];
        for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        }
        return result;
    }

    private static int[] splitInt() {
        String[] tmp = read().split("");
        int[] result = new int[tmp.length];
        for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    }

    private static long readLong() {
        return Long.parseLong(read());
    }

    private static double readDouble() {
        return Double.parseDouble(read());
    }

    public static void main(String[] args){
        run();
    }

    private static void run() {
        int gohyaku = readInt();
        int hyaku = readInt();
        int goju = readInt();
        int total = readInt();
        int count = 0;
        for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        }
        System.out.println(count);
    }
} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.*;

public class Main {

    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    private static final PrintWriter sysout = new PrintWriter(System.out, false);

    private static StringTokenizer buffer;

    private static String readLine() {
        buffer = null;
        try {
            return br.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static String read() {
        if (buffer == null || !buffer.hasMoreTokens()) {
            buffer = new StringTokenizer(readLine());
        }
        return buffer.nextToken();
    }

    private static int readInt() {
        return Integer.parseInt(read());
    }

    private static int[] readIntArray(int loop) {
        int[] result = new int[loop];
        for (int i = 0; i < loop; i++) {
            result[i] = readInt();
        }
        return result;
    }

    private static int[] splitInt() {
        String[] tmp = read().split("");
        int[] result = new int[tmp.length];
        for (int i = 0, n = tmp.length; i < n; i++) {
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    }

    private static long readLong() {
        return Long.parseLong(read());
    }

    private static double readDouble() {
        return Double.parseDouble(read());
    }

    public static void main(String[] args){
        run();
    }

    private static void run() {
        int gohyaku = readInt();
        int hyaku = readInt();
        int goju = readInt();
        int total = readInt();
        int count = 0;
        for (int i = 0; i <= gohyaku; i++) {
            for (int j = 0; j <= hyaku; j++) {
                for (int k = 0; k <= goju; k++) {
                    int result = 500*i + 100*j + 50*k;
                    if (total == result) count++;
                }
            }
        }
        System.out.println(count);
    }
}