Casting fraction number to decimal throws Arithmetic overflow error
From error message, 


  Arithmetic overflow error converting varchar to data type numeric.


My first place where I could change is :

 ELSE a.Marks


and change it to

ELSE try_convert(int, a.Marks) 


or convert to decimal , if you want

Later edit:
In case expression you have a few THEN with different data types: int, numeric, varchar. Due to data type precedence, when combines different data types, the lower data type is converted to the type with higher precedence
See here information about it.

you can see this , by this example:

SELECT   SQL_VARIANT_PROPERTY(col,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(col,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(col,'Scale') AS 'Scale'
FROM
  (select 0 as col) as a  

SELECT   SQL_VARIANT_PROPERTY(col,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(col,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(col,'Scale') AS 'Scale'
FROM
  (select 1 as col) as a

SELECT   SQL_VARIANT_PROPERTY(col,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(col,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(col,'Scale') AS 'Scale'
FROM
  (select -1 as col ) as a

SELECT   SQL_VARIANT_PROPERTY(col,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(col,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(col,'Scale') AS 'Scale'
FROM
  (select 0.5 as col) as a   

SELECT   SQL_VARIANT_PROPERTY(col,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(col,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(col,'Scale') AS 'Scale'
FROM
  (select '-+' as col) as a 



Base Type   Precision   Scale
int         10          0
Base Type   Precision   Scale
int         10          0
Base Type   Precision   Scale
int         10           0
Base Type   Precision   Scale
numeric     1           1
Base Type   Precision   Scale
varchar     0           0