Zara it's ok - I know it doesn't feel like it but it is OK, it's all OK. Just take a moment for yourself to breathe deeply - just a moment for yourself to take a step back and calm yourself.
You are NOT a bad mother. All of your posts here attest to that. You are in a very stressful situation - sleep deprivation, screaming, feeling inadequate - it is the worst and you have to gain perspective. You are reacting emotionally to an emotional situation. You want the best for your baby, you feel you've somehow failed at BFing, insensitive remarks from MIL become like stab wounds, your baby is crying and seems inconsolable.
You're at this high level of anxiety and stress right now - and very quickly keep going higher. You need something for yourself - to calm yourself down, to burst this pressure bubble you're in at the moment, something to calm the stress levels you're outputting. Your DS will surely be picking up on that and I know it's really, really easy to feel like a failure, to feel like even your stress is to blame - but it's not, it's just reason - you need to bring yourself right back down from this high level of stress. If your MIL thinks she's so great at looking after babies, book yourself a massage and have a bit of time away from your DS.
Four hours of screaming is too much to bear. Do not beat yourself up for this. Your reaction was one of frustration, stress, anxiety and upset - not malice, not intent to hurt, not bad parenting. Please remember that.