I know of three options:
The first (and probably the best) is to use an unwind segue. They are greatly explained in details here (SO question)
The second one, if your VC1 is the root view controller, is to simply use this line in your VC4:
self.navigationController?.popToRootViewControllerAnimated(true);
The last one is to manually set the ViewControllers stack to the state that you want (note, that you're going to get references to your VCs somehow). For example, "go three VCs back" (sorry, autocomplete suddenly broke down in Xcode for Swift, so Objective-C only):
UINavigationController *navigationController = self.navigationController;
NSMutableArray *newVCs = [navigationController.viewControllers mutableCopy];
//This part would be more elegant in Swift, of course
[newVCs removeLastObject];
[newVCs removeLastObject];
[newVCs removeLastObject];
[navigationController setViewControllers:newVCs animated:YES];
The first solution is the best, because it is the most flexible. And it doesn't make you hardcode your VCs stack. But it really depends on your requirements. The second one is by far the easiest to implement, so if you need to go back to the root VC, it is the way to go. As for the third one, it's somewhat easier to implement than the first one, but I think that the first one is the most correct.