/*
 * あなたは、500 円玉を A 枚、100 円玉を B 枚、50 円玉を C 枚持っています。 これらの硬貨の中から何枚かを選び、合計金額をちょうど X 円にする方法は何通りありますか。
 * 
 * 同じ種類の硬貨どうしは区別できません。2 通りの硬貨の選び方は、ある種類の硬貨についてその硬貨を選ぶ枚数が異なるとき区別されます。
 */

import java.util.*;
	public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            //入力
            int a = Integer.parseInt(sc.next());
            int b = Integer.parseInt(sc.next());
            int c = Integer.parseInt(sc.next());
            int x = Integer.parseInt(sc.next());
            
            int aa = x/500;
            int counter = 0;
            
            for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            }
            
            //出力
            System.out.println(counter);
            sc.close();
        }
    }
	 import java.util.*; util.* java public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            //入力
            int a = Integer.parseInt(sc.next());
            int b = Integer.parseInt(sc.next());
            int c = Integer.parseInt(sc.next());
            int x = Integer.parseInt(sc.next());
            
            int aa = x/500;
            int counter = 0;
            
            for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            }
            
            //出力
            System.out.println(counter);
            sc.close();
        }
    } Main public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            //入力
            int a = Integer.parseInt(sc.next());
            int b = Integer.parseInt(sc.next());
            int c = Integer.parseInt(sc.next());
            int x = Integer.parseInt(sc.next());
            
            int aa = x/500;
            int counter = 0;
            
            for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            }
            
            //出力
            System.out.println(counter);
            sc.close();
        } main {
            Scanner sc = new Scanner(System.in);
            //入力
            int a = Integer.parseInt(sc.next());
            int b = Integer.parseInt(sc.next());
            int c = Integer.parseInt(sc.next());
            int x = Integer.parseInt(sc.next());
            
            int aa = x/500;
            int counter = 0;
            
            for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            }
            
            //出力
            System.out.println(counter);
            sc.close();
        } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int a = Integer.parseInt(sc.next()); a Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int b = Integer.parseInt(sc.next()); b Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int c = Integer.parseInt(sc.next()); c Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int x = Integer.parseInt(sc.next()); x Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int aa = x/500; aa x/500 x 500 int counter = 0; counter 0 for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            } int i=0; int i=0; i 0 i<=Math.min(aa,a) i Math.min(aa,a) Math.min Math aa a i++ i++ i {
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            } {
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            } for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	} int j=0; int j=0; j 0 j<=Math.min((x-i*500)/100, b) j Math.min((x-i*500)/100, b) Math.min Math (x-i*500)/100 (x-i*500) x i*500 i 500 100 b j++ j++ j {
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	} {
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	} if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		} (x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c (x - i*500 - j*100)%50 == 0 (x - i*500 - j*100)%50 (x - i*500 - j*100) x - i*500 - j*100 x i*500 i 500 j*100 j 100 50 0 (x - i*500 - j*100)/50 <=c (x - i*500 - j*100)/50 (x - i*500 - j*100) x - i*500 - j*100 x i*500 i 500 j*100 j 100 50 c {
            			counter++;
            		} counter++ counter System.out.println(counter) System.out.println System.out System System.out counter sc.close() sc.close sc String[] args args public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            //入力
            int a = Integer.parseInt(sc.next());
            int b = Integer.parseInt(sc.next());
            int c = Integer.parseInt(sc.next());
            int x = Integer.parseInt(sc.next());
            
            int aa = x/500;
            int counter = 0;
            
            for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            }
            
            //出力
            System.out.println(counter);
            sc.close();
        }
    } public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            //入力
            int a = Integer.parseInt(sc.next());
            int b = Integer.parseInt(sc.next());
            int c = Integer.parseInt(sc.next());
            int x = Integer.parseInt(sc.next());
            
            int aa = x/500;
            int counter = 0;
            
            for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            }
            
            //出力
            System.out.println(counter);
            sc.close();
        }
    } Main
/*
 * あなたは、500 円玉を A 枚、100 円玉を B 枚、50 円玉を C 枚持っています。 これらの硬貨の中から何枚かを選び、合計金額をちょうど X 円にする方法は何通りありますか。
 * 
 * 同じ種類の硬貨どうしは区別できません。2 通りの硬貨の選び方は、ある種類の硬貨についてその硬貨を選ぶ枚数が異なるとき区別されます。
 */

import java.util.*;
	public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            //入力
            int a = Integer.parseInt(sc.next());
            int b = Integer.parseInt(sc.next());
            int c = Integer.parseInt(sc.next());
            int x = Integer.parseInt(sc.next());
            
            int aa = x/500;
            int counter = 0;
            
            for(int i=0; i<=Math.min(aa,a); i++){
            	for(int j=0; j<=Math.min((x-i*500)/100, b); j++){
            		if((x - i*500 - j*100)%50 == 0 && (x - i*500 - j*100)/50 <=c){
            			counter++;
            		}
            	}
            }
            
            //出力
            System.out.println(counter);
            sc.close();
        }
    }
	