You need to keep detailed track of what shape the image is after being passed through convolution and pooling layers. In this case after conv+pool+conv+pool the spatial size is 47x47. So your self.fc1 layer needs to have an input size of 16 * 47 * 47.
Input size: 200x200
After one 5x5 conv2d: 196x196
After a 2x2 pool2d: 98x98
After another 5x5 conv2d: 94x94
After the final 2x2 pool2d: 47x47
It’s easier to keep track of if you set the conv2d layers to have a padding size of 1 (for 3x3) or 2 (for 5x5), that way the only thing that changes the spatial extent of the image is the pooling.