import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		// 処理対象個数の入力
		Scanner sc = new Scanner(System.in);
		int input_500 = sc.nextInt();
		int input_100 = sc.nextInt();
		int input_50 = sc.nextInt();
		int input_pay = sc.nextInt();
		int result = 0;
		sc.close();

		for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		}

		// 出力
		System.out.println(result);

	}

} import java.util.Scanner; Scanner java.util public class Main {
	public static void main(String[] args) {
		// 処理対象個数の入力
		Scanner sc = new Scanner(System.in);
		int input_500 = sc.nextInt();
		int input_100 = sc.nextInt();
		int input_50 = sc.nextInt();
		int input_pay = sc.nextInt();
		int result = 0;
		sc.close();

		for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		}

		// 出力
		System.out.println(result);

	}

} Main public static void main(String[] args) {
		// 処理対象個数の入力
		Scanner sc = new Scanner(System.in);
		int input_500 = sc.nextInt();
		int input_100 = sc.nextInt();
		int input_50 = sc.nextInt();
		int input_pay = sc.nextInt();
		int result = 0;
		sc.close();

		for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		}

		// 出力
		System.out.println(result);

	} main {
		// 処理対象個数の入力
		Scanner sc = new Scanner(System.in);
		int input_500 = sc.nextInt();
		int input_100 = sc.nextInt();
		int input_50 = sc.nextInt();
		int input_pay = sc.nextInt();
		int result = 0;
		sc.close();

		for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		}

		// 出力
		System.out.println(result);

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int input_500 = sc.nextInt(); input_500 sc.nextInt() sc.nextInt sc int input_100 = sc.nextInt(); input_100 sc.nextInt() sc.nextInt sc int input_50 = sc.nextInt(); input_50 sc.nextInt() sc.nextInt sc int input_pay = sc.nextInt(); input_pay sc.nextInt() sc.nextInt sc int result = 0; result 0 sc.close() sc.close sc for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		} int i=0; int i=0; i 0 i<=input_500 i input_500 i++ i++ i {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		} {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		} for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			} int j=0; int j=0; j 0 j<=input_100 j input_100 j++ j++ j {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			} {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			} for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				} int k=0; int k=0; k 0 k<=input_50 k input_50 k++ k++ k {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				} {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				} if(i*500+j*100+k*50 == input_pay) {
						result++;
					} i*500+j*100+k*50 == input_pay i*500+j*100+k*50 i*500+j*100+k*50 i*500 i 500 j*100 j 100 k*50 k 50 input_pay {
						result++;
					} result++ result System.out.println(result) System.out.println System.out System System.out result String[] args args public class Main {
	public static void main(String[] args) {
		// 処理対象個数の入力
		Scanner sc = new Scanner(System.in);
		int input_500 = sc.nextInt();
		int input_100 = sc.nextInt();
		int input_50 = sc.nextInt();
		int input_pay = sc.nextInt();
		int result = 0;
		sc.close();

		for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		}

		// 出力
		System.out.println(result);

	}

} public class Main {
	public static void main(String[] args) {
		// 処理対象個数の入力
		Scanner sc = new Scanner(System.in);
		int input_500 = sc.nextInt();
		int input_100 = sc.nextInt();
		int input_50 = sc.nextInt();
		int input_pay = sc.nextInt();
		int result = 0;
		sc.close();

		for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		}

		// 出力
		System.out.println(result);

	}

} Main
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		// 処理対象個数の入力
		Scanner sc = new Scanner(System.in);
		int input_500 = sc.nextInt();
		int input_100 = sc.nextInt();
		int input_50 = sc.nextInt();
		int input_pay = sc.nextInt();
		int result = 0;
		sc.close();

		for(int i=0;i<=input_500;i++) {
			for(int j=0;j<=input_100;j++) {
				for(int k=0;k<=input_50;k++) {
					if(i*500+j*100+k*50 == input_pay) {
						result++;
					}
				}
			}
		}

		// 出力
		System.out.println(result);

	}

}
