Preheat oven to 180 C / Gas 4. Grease a 23x33cm or similar sized baking dish. Bring a large pot of lightly salted water to the boil. Add pasta and cook for 8 to 10 minutes or until al dente; drain.
In medium saucepan, melt butter and stir in flour to make a roux. Cook 1 to 2 minutes, stirring constantly, then whisk in warm milk a little at a time to make a white sauce. Bring to the boil, then reduce heat and simmer. Mix in salt, pepper and cayenne and stir frequently until sauce thickens.
Remove pan from heat and stir in Cheddar, mozzarella and ham. Combine pasta with sauce and stir well. Pour into baking dish. Use paprika to make a decorative pattern on top. Bake 45 to 60 minutes or until top is the desired crispiness. Let rest 20 minutes before serving.