import java.util.*;
// warm-up
// Same pattern multiple times. I think its a sign
public class Main {

	static void solve() {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt(), X = sc.nextInt(), t=0;
		for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		}
		System.out.println(t);
		sc.close();		
	}

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

} import java.util.*; util.* java public class Main {

	static void solve() {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt(), X = sc.nextInt(), t=0;
		for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		}
		System.out.println(t);
		sc.close();		
	}

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

} Main static void solve() {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt(), X = sc.nextInt(), t=0;
		for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		}
		System.out.println(t);
		sc.close();		
	} solve {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt(), X = sc.nextInt(), t=0;
		for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		}
		System.out.println(t);
		sc.close();		
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int A = sc.nextInt() A sc.nextInt() sc.nextInt sc B = sc.nextInt() B sc.nextInt() sc.nextInt sc C = sc.nextInt() C sc.nextInt() sc.nextInt sc X = sc.nextInt() X sc.nextInt() sc.nextInt sc t=0; t 0 for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		} int i=0; int i=0; i 0 i<=A i A i++ i++ i {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		} {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		} for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			} int j=0; int j=0; j 0 j<=B j B j++ j++ j {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			} {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			} if ((X-(500*i)-(100*j))%50!=0) continue; (X-(500*i)-(100*j))%50!=0 (X-(500*i)-(100*j))%50 (X-(500*i)-(100*j)) X-(500*i)-(100*j) X (500*i) 500 i (100*j) 100 j 50 0 continue; int k = (X-(500*i)-(100*j))/50; k (X-(500*i)-(100*j))/50 (X-(500*i)-(100*j)) X-(500*i)-(100*j) X (500*i) 500 i (100*j) 100 j 50 if (k>=0 && k<=C) t++; k>=0 && k<=C k>=0 k 0 k<=C k C t++ t System.out.println(t) System.out.println System.out System System.out t sc.close() sc.close sc public static void main(String args[]) {
		solve();
	} main {
		solve();
	} solve() solve String args[] args public class Main {

	static void solve() {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt(), X = sc.nextInt(), t=0;
		for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		}
		System.out.println(t);
		sc.close();		
	}

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

} public class Main {

	static void solve() {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt(), X = sc.nextInt(), t=0;
		for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		}
		System.out.println(t);
		sc.close();		
	}

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

} Main
import java.util.*;
// warm-up
// Same pattern multiple times. I think its a sign
public class Main {

	static void solve() {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt(), X = sc.nextInt(), t=0;
		for (int i=0; i<=A; i++) {
			for (int j=0; j<=B; j++) {
				if ((X-(500*i)-(100*j))%50!=0) continue;
				int k = (X-(500*i)-(100*j))/50;
				if (k>=0 && k<=C) t++;
			}
		}
		System.out.println(t);
		sc.close();		
	}

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

}